mirror of
https://gh.wpcy.net/https://github.com/aspirepress/aspireupdate.git
synced 2026-07-16 09:46:32 +08:00
104 lines
2.9 KiB
PHP
104 lines
2.9 KiB
PHP
<?php
|
|
/**
|
|
* The Class for WordPress Direct Filesystem with optimized read and write routines.
|
|
*
|
|
* @package aspire-update
|
|
*/
|
|
|
|
namespace AspireUpdate;
|
|
|
|
/**
|
|
* The Class for WordPress Direct Filesystem with optimized read and write routines.
|
|
*/
|
|
class Filesystem_Direct extends \WP_Filesystem_Direct {
|
|
|
|
/**
|
|
* Reads entire file into an array with options for limiting the number of lines and direction from the the lines are counted.
|
|
*
|
|
* @param string $file Path to the file.
|
|
* @param int $number_of_lines The number of lines to read. Default is -1 (read all lines).
|
|
* @param bool $count_bottom_to_top Count the lines from the bottom up. Default is false (count from top to bottom).
|
|
*
|
|
* @return array|false File contents in an array on success, false on failure.
|
|
*/
|
|
public function get_contents_array( $file, $number_of_lines = -1, $count_bottom_to_top = false ) {
|
|
if ( ! $this->exists( $file ) ) {
|
|
return false;
|
|
}
|
|
|
|
if ( -1 === $number_of_lines ) {
|
|
return @file( $file );
|
|
}
|
|
|
|
$handle = @fopen( $file, 'r' );
|
|
if ( ! $handle ) {
|
|
return false;
|
|
}
|
|
|
|
$lines = [];
|
|
$line_count = 0;
|
|
|
|
// phpcs:disable Generic.CodeAnalysis.AssignmentInCondition.FoundInWhileCondition
|
|
/**
|
|
* This is a valid and intentional use.
|
|
*/
|
|
while ( ( $line = fgets( $handle ) ) !== false ) {
|
|
$lines[] = trim( $line );
|
|
++$line_count;
|
|
|
|
if ( $count_bottom_to_top ) {
|
|
if ( $number_of_lines > 0 && $line_count > $number_of_lines ) {
|
|
array_shift( $lines );
|
|
}
|
|
} elseif ( $number_of_lines > 0 && $line_count >= $number_of_lines ) {
|
|
break;
|
|
}
|
|
}
|
|
// phpcs:enable
|
|
|
|
fclose( $handle );
|
|
|
|
return $lines;
|
|
}
|
|
|
|
/**
|
|
* Write contents to a file with additional modes.
|
|
*
|
|
* @param string $file The path to the file.
|
|
* @param string $contents The content to write.
|
|
* @param int|false $mode Optional. The file permissions as octal number, usually 0644.
|
|
* Default false.
|
|
* @param string $write_mode The write mode:
|
|
* 'w' - Overwrite the file (default).
|
|
* 'a' - Append to the file.
|
|
* 'x' - Create a new file and write, fail if the file exists.
|
|
* 'c' - Open the file for writing, but do not truncate.
|
|
* @return bool True on success, false on failure.
|
|
*/
|
|
public function put_contents( $file, $contents, $mode = false, $write_mode = 'w' ) {
|
|
$valid_write_modes = [ 'w', 'a', 'x', 'c' ];
|
|
if ( ! in_array( $write_mode, $valid_write_modes, true ) ) {
|
|
return false;
|
|
}
|
|
|
|
$handle = @fopen( $file, $write_mode );
|
|
if ( ! $handle ) {
|
|
return false;
|
|
}
|
|
|
|
mbstring_binary_safe_encoding();
|
|
$data_length = strlen( $contents );
|
|
$bytes_written = fwrite( $handle, $contents );
|
|
reset_mbstring_encoding();
|
|
|
|
fclose( $handle );
|
|
|
|
if ( $data_length !== $bytes_written ) {
|
|
return false;
|
|
}
|
|
|
|
$this->chmod( $file, $mode );
|
|
|
|
return true;
|
|
}
|
|
}
|