Docs: Improve documentation for various WP_Filesystem_Base methods and extending classes.

Props jaydeep-rami, man4toman, SaeedFard, mukesh27, mohadeseghasemi, ebrahimzadeh, juiiee8487, SergeyBiryukov.
Fixes #42227, #46806, #46840. See #46543.

git-svn-id: https://develop.svn.wordpress.org/trunk@45226 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Sergey Biryukov 2019-04-17 04:12:27 +00:00
parent ad64c754c3
commit 0152c18cd2
5 changed files with 956 additions and 398 deletions

View File

@ -7,11 +7,12 @@
*/ */
/** /**
* Base WordPress Filesystem class for which Filesystem implementations extend * Base WordPress Filesystem class which Filesystem implementations extend.
* *
* @since 2.5.0 * @since 2.5.0
*/ */
class WP_Filesystem_Base { class WP_Filesystem_Base {
/** /**
* Whether to display debug data for the connection. * Whether to display debug data for the connection.
* *
@ -46,7 +47,7 @@ class WP_Filesystem_Base {
public $options = array(); public $options = array();
/** /**
* Return the path on the remote filesystem of ABSPATH. * Returns the path on the remote filesystem of ABSPATH.
* *
* @since 2.7.0 * @since 2.7.0
* *
@ -62,7 +63,7 @@ class WP_Filesystem_Base {
} }
/** /**
* Return the path on the remote filesystem of WP_CONTENT_DIR. * Returns the path on the remote filesystem of WP_CONTENT_DIR.
* *
* @since 2.7.0 * @since 2.7.0
* *
@ -73,7 +74,7 @@ class WP_Filesystem_Base {
} }
/** /**
* Return the path on the remote filesystem of WP_PLUGIN_DIR. * Returns the path on the remote filesystem of WP_PLUGIN_DIR.
* *
* @since 2.7.0 * @since 2.7.0
* *
@ -84,11 +85,12 @@ class WP_Filesystem_Base {
} }
/** /**
* Return the path on the remote filesystem of the Themes Directory. * Returns the path on the remote filesystem of the Themes Directory.
* *
* @since 2.7.0 * @since 2.7.0
* *
* @param string $theme The Theme stylesheet or template for the directory. * @param string|false $theme Optional. The theme stylesheet or template for the directory.
* Default false.
* @return string The location of the remote path. * @return string The location of the remote path.
*/ */
public function wp_themes_dir( $theme = false ) { public function wp_themes_dir( $theme = false ) {
@ -103,7 +105,7 @@ class WP_Filesystem_Base {
} }
/** /**
* Return the path on the remote filesystem of WP_LANG_DIR. * Returns the path on the remote filesystem of WP_LANG_DIR.
* *
* @since 3.2.0 * @since 3.2.0
* *
@ -114,7 +116,7 @@ class WP_Filesystem_Base {
} }
/** /**
* Locate a folder on the remote filesystem. * Locates a folder on the remote filesystem.
* *
* @since 2.5.0 * @since 2.5.0
* @deprecated 2.7.0 use WP_Filesystem::abspath() or WP_Filesystem::wp_*_dir() instead. * @deprecated 2.7.0 use WP_Filesystem::abspath() or WP_Filesystem::wp_*_dir() instead.
@ -136,7 +138,7 @@ class WP_Filesystem_Base {
} }
/** /**
* Locate a folder on the remote filesystem. * Locates a folder on the remote filesystem.
* *
* @since 2.5.0 * @since 2.5.0
* @deprecated 2.7.0 use WP_Filesystem::abspath() or WP_Filesystem::wp_*_dir() methods instead. * @deprecated 2.7.0 use WP_Filesystem::abspath() or WP_Filesystem::wp_*_dir() methods instead.
@ -157,10 +159,10 @@ class WP_Filesystem_Base {
} }
/** /**
* Locate a folder on the remote filesystem. * Locates a folder on the remote filesystem.
* *
* Assumes that on Windows systems, Stripping off the Drive * Assumes that on Windows systems, Stripping off the Drive
* letter is OK Sanitizes \\ to / in windows filepaths. * letter is OK Sanitizes \\ to / in Windows filepaths.
* *
* @since 2.7.0 * @since 2.7.0
* *
@ -229,7 +231,7 @@ class WP_Filesystem_Base {
} }
/** /**
* Locate a folder on the remote filesystem. * Locates a folder on the remote filesystem.
* *
* Expects Windows sanitized path. * Expects Windows sanitized path.
* *
@ -267,9 +269,9 @@ class WP_Filesystem_Base {
/* /*
* Working from /home/ to /user/ to /wordpress/ see if that file exists within * Working from /home/ to /user/ to /wordpress/ see if that file exists within
* the current folder, If it's found, change into it and follow through looking * the current folder, If it's found, change into it and follow through looking
* for it. If it cant find WordPress down that route, it'll continue onto the next * for it. If it can't find WordPress down that route, it'll continue onto the next
* folder level, and see if that matches, and so on. If it reaches the end, and still * folder level, and see if that matches, and so on. If it reaches the end, and still
* cant find it, it'll return false for the entire function. * can't find it, it'll return false for the entire function.
*/ */
if ( isset( $files[ $key ] ) ) { if ( isset( $files[ $key ] ) ) {
@ -311,7 +313,7 @@ class WP_Filesystem_Base {
} }
/** /**
* Return the *nix-style file permissions for a file. * Returns the *nix-style file permissions for a file.
* *
* From the PHP documentation page for fileperms(). * From the PHP documentation page for fileperms().
* *
@ -366,18 +368,19 @@ class WP_Filesystem_Base {
} }
/** /**
* Gets the permissions of the specified file or filepath in their octal format * Gets the permissions of the specified file or filepath in their octal format.
* *
* @since 2.5.0 * @since 2.5.0
* @param string $file *
* @return string the last 3 characters of the octal number * @param string $file Path to the file.
* @return string Mode of the file (the last 3 digits).
*/ */
public function getchmod( $file ) { public function getchmod( $file ) {
return '777'; return '777';
} }
/** /**
* Convert *nix-style file permissions to a octal number. * Converts *nix-style file permissions to a octal number.
* *
* Converts '-rw-r--r--' to 0644 * Converts '-rw-r--r--' to 0644
* From "info at rvgate dot nl"'s comment on the PHP documentation for chmod() * From "info at rvgate dot nl"'s comment on the PHP documentation for chmod()
@ -417,187 +420,192 @@ class WP_Filesystem_Base {
} }
/** /**
* Determine if the string provided contains binary characters. * Determines if the string provided contains binary characters.
* *
* @since 2.7.0 * @since 2.7.0
* *
* @param string $text String to test against. * @param string $text String to test against.
* @return bool true if string is binary, false otherwise. * @return bool True if string is binary, false otherwise.
*/ */
public function is_binary( $text ) { public function is_binary( $text ) {
return (bool) preg_match( '|[^\x20-\x7E]|', $text ); // chr(32)..chr(127) return (bool) preg_match( '|[^\x20-\x7E]|', $text ); // chr(32)..chr(127)
} }
/** /**
* Change the ownership of a file / folder. * Changes the owner of a file or directory.
* *
* Default behavior is to do nothing, override this in your subclass, if desired. * Default behavior is to do nothing, override this in your subclass, if desired.
* *
* @since 2.5.0 * @since 2.5.0
* *
* @param string $file Path to the file. * @param string $file Path to the file or directory.
* @param mixed $owner A user name or number. * @param string|int $owner A user name or number.
* @param bool $recursive Optional. If set True changes file owner recursivly. Defaults to False. * @param bool $recursive Optional. If set to true, changes file owner recursively.
* @return bool Returns true on success or false on failure. * Default false.
* @return bool True on success, false on failure.
*/ */
public function chown( $file, $owner, $recursive = false ) { public function chown( $file, $owner, $recursive = false ) {
return false; return false;
} }
/** /**
* Connect filesystem. * Connects filesystem.
* *
* @since 2.5.0 * @since 2.5.0
* @abstract * @abstract
* *
* @return bool True on success or false on failure (always true for WP_Filesystem_Direct). * @return bool True on success, false on failure (always true for WP_Filesystem_Direct).
*/ */
public function connect() { public function connect() {
return true; return true;
} }
/** /**
* Read entire file into a string. * Reads entire file into a string.
* *
* @since 2.5.0 * @since 2.5.0
* @abstract * @abstract
* *
* @param string $file Name of the file to read. * @param string $file Name of the file to read.
* @return mixed|bool Returns the read data or false on failure. * @return string|false Read data on success, false on failure.
*/ */
public function get_contents( $file ) { public function get_contents( $file ) {
return false; return false;
} }
/** /**
* Read entire file into an array. * Reads entire file into an array.
* *
* @since 2.5.0 * @since 2.5.0
* @abstract * @abstract
* *
* @param string $file Path to the file. * @param string $file Path to the file.
* @return array|bool the file contents in an array or false on failure. * @return array|false File contents in an array on success, false on failure.
*/ */
public function get_contents_array( $file ) { public function get_contents_array( $file ) {
return false; return false;
} }
/** /**
* Write a string to a file. * Writes a string to a file.
* *
* @since 2.5.0 * @since 2.5.0
* @abstract * @abstract
* *
* @param string $file Remote path to the file where to write the data. * @param string $file Remote path to the file where to write the data.
* @param string $contents The data to write. * @param string $contents The data to write.
* @param int $mode Optional. The file permissions as octal number, usually 0644. * @param int|false $mode Optional. The file permissions as octal number, usually 0644.
* @return bool False on failure. * Default false.
* @return bool True on success, false on failure.
*/ */
public function put_contents( $file, $contents, $mode = false ) { public function put_contents( $file, $contents, $mode = false ) {
return false; return false;
} }
/** /**
* Get the current working directory. * Gets the current working directory.
* *
* @since 2.5.0 * @since 2.5.0
* @abstract * @abstract
* *
* @return string|bool The current working directory on success, or false on failure. * @return string|false The current working directory on success, false on failure.
*/ */
public function cwd() { public function cwd() {
return false; return false;
} }
/** /**
* Change current directory. * Changes current directory.
* *
* @since 2.5.0 * @since 2.5.0
* @abstract * @abstract
* *
* @param string $dir The new current directory. * @param string $dir The new current directory.
* @return bool|string * @return bool True on success, false on failure.
*/ */
public function chdir( $dir ) { public function chdir( $dir ) {
return false; return false;
} }
/** /**
* Change the file group. * Changes the file group.
* *
* @since 2.5.0 * @since 2.5.0
* @abstract * @abstract
* *
* @param string $file Path to the file. * @param string $file Path to the file.
* @param mixed $group A group name or number. * @param string|int $group A group name or number.
* @param bool $recursive Optional. If set True changes file group recursively. Defaults to False. * @param bool $recursive Optional. If set to true, changes file group recursively.
* @return bool|string * Default false.
* @return bool True on success, false on failure.
*/ */
public function chgrp( $file, $group, $recursive = false ) { public function chgrp( $file, $group, $recursive = false ) {
return false; return false;
} }
/** /**
* Change filesystem permissions. * Changes filesystem permissions.
* *
* @since 2.5.0 * @since 2.5.0
* @abstract * @abstract
* *
* @param string $file Path to the file. * @param string $file Path to the file.
* @param int $mode Optional. The permissions as octal number, usually 0644 for files, 0755 for dirs. * @param int|false $mode Optional. The permissions as octal number, usually 0644 for files,
* @param bool $recursive Optional. If set True changes file group recursively. Defaults to False. * 0755 for directories. Default false.
* @return bool|string * @param bool $recursive Optional. If set to true, changes file group recursively.
* Default false.
* @return bool True on success, false on failure.
*/ */
public function chmod( $file, $mode = false, $recursive = false ) { public function chmod( $file, $mode = false, $recursive = false ) {
return false; return false;
} }
/** /**
* Get the file owner. * Gets the file owner.
* *
* @since 2.5.0 * @since 2.5.0
* @abstract * @abstract
* *
* @param string $file Path to the file. * @param string $file Path to the file.
* @return string|bool Username of the user or false on error. * @return string|false Username of the owner on success, false on failure.
*/ */
public function owner( $file ) { public function owner( $file ) {
return false; return false;
} }
/** /**
* Get the file's group. * Gets the file's group.
* *
* @since 2.5.0 * @since 2.5.0
* @abstract * @abstract
* *
* @param string $file Path to the file. * @param string $file Path to the file.
* @return string|bool The group or false on error. * @return string|false The group on success, false on failure.
*/ */
public function group( $file ) { public function group( $file ) {
return false; return false;
} }
/** /**
* Copy a file. * Copies a file.
* *
* @since 2.5.0 * @since 2.5.0
* @abstract * @abstract
* *
* @param string $source Path to the source file. * @param string $source Path to the source file.
* @param string $destination Path to the destination file. * @param string $destination Path to the destination file.
* @param bool $overwrite Optional. Whether to overwrite the destination file if it exists. * @param bool $overwrite Optional. Whether to overwrite the destination file if it exists.
* Default false. * Default false.
* @param int $mode Optional. The permissions as octal number, usually 0644 for files, 0755 for dirs. * @param int|false $mode Optional. The permissions as octal number, usually 0644 for files,
* Default false. * 0755 for dirs. Default false.
* @return bool True if file copied successfully, False otherwise. * @return bool True on success, false on failure.
*/ */
public function copy( $source, $destination, $overwrite = false, $mode = false ) { public function copy( $source, $destination, $overwrite = false, $mode = false ) {
return false; return false;
} }
/** /**
* Move a file. * Moves a file.
* *
* @since 2.5.0 * @since 2.5.0
* @abstract * @abstract
@ -606,36 +614,36 @@ class WP_Filesystem_Base {
* @param string $destination Path to the destination file. * @param string $destination Path to the destination file.
* @param bool $overwrite Optional. Whether to overwrite the destination file if it exists. * @param bool $overwrite Optional. Whether to overwrite the destination file if it exists.
* Default false. * Default false.
* @return bool True if file copied successfully, False otherwise. * @return bool True on success, false on failure.
*/ */
public function move( $source, $destination, $overwrite = false ) { public function move( $source, $destination, $overwrite = false ) {
return false; return false;
} }
/** /**
* Delete a file or directory. * Deletes a file or directory.
* *
* @since 2.5.0 * @since 2.5.0
* @abstract * @abstract
* *
* @param string $file Path to the file. * @param string $file Path to the file or directory.
* @param bool $recursive Optional. If set True changes file group recursively. Defaults to False. * @param bool $recursive Optional. If set to true, changes file group recursively.
* Default false. * Default false.
* @param bool $type Type of resource. 'f' for file, 'd' for directory. * @param string|false $type Type of resource. 'f' for file, 'd' for directory.
* Default false. * Default false.
* @return bool True if the file or directory was deleted, false on failure. * @return bool True on success, false on failure.
*/ */
public function delete( $file, $recursive = false, $type = false ) { public function delete( $file, $recursive = false, $type = false ) {
return false; return false;
} }
/** /**
* Check if a file or directory exists. * Checks if a file or directory exists.
* *
* @since 2.5.0 * @since 2.5.0
* @abstract * @abstract
* *
* @param string $file Path to file/directory. * @param string $file Path to file or directory.
* @return bool Whether $file exists or not. * @return bool Whether $file exists or not.
*/ */
public function exists( $file ) { public function exists( $file ) {
@ -643,7 +651,7 @@ class WP_Filesystem_Base {
} }
/** /**
* Check if resource is a file. * Checks if resource is a file.
* *
* @since 2.5.0 * @since 2.5.0
* @abstract * @abstract
@ -656,7 +664,7 @@ class WP_Filesystem_Base {
} }
/** /**
* Check if resource is a directory. * Checks if resource is a directory.
* *
* @since 2.5.0 * @since 2.5.0
* @abstract * @abstract
@ -669,7 +677,7 @@ class WP_Filesystem_Base {
} }
/** /**
* Check if a file is readable. * Checks if a file is readable.
* *
* @since 2.5.0 * @since 2.5.0
* @abstract * @abstract
@ -682,12 +690,12 @@ class WP_Filesystem_Base {
} }
/** /**
* Check if a file or directory is writable. * Checks if a file or directory is writable.
* *
* @since 2.5.0 * @since 2.5.0
* @abstract * @abstract
* *
* @param string $file Path to file. * @param string $file Path to file or directory.
* @return bool Whether $file is writable. * @return bool Whether $file is writable.
*/ */
public function is_writable( $file ) { public function is_writable( $file ) {
@ -701,7 +709,7 @@ class WP_Filesystem_Base {
* @abstract * @abstract
* *
* @param string $file Path to file. * @param string $file Path to file.
* @return int|bool Unix timestamp representing last access time. * @return int|false Unix timestamp representing last access time, false on failure.
*/ */
public function atime( $file ) { public function atime( $file ) {
return false; return false;
@ -714,7 +722,7 @@ class WP_Filesystem_Base {
* @abstract * @abstract
* *
* @param string $file Path to file. * @param string $file Path to file.
* @return int|bool Unix timestamp representing modification time. * @return int|false Unix timestamp representing modification time, false on failure.
*/ */
public function mtime( $file ) { public function mtime( $file ) {
return false; return false;
@ -727,14 +735,14 @@ class WP_Filesystem_Base {
* @abstract * @abstract
* *
* @param string $file Path to file. * @param string $file Path to file.
* @return int|bool Size of the file in bytes. * @return int|false Size of the file in bytes on success, false on failure.
*/ */
public function size( $file ) { public function size( $file ) {
return false; return false;
} }
/** /**
* Set the access and modification times of a file. * Sets the access and modification times of a file.
* *
* Note: If $file doesn't exist, it will be created. * Note: If $file doesn't exist, it will be created.
* *
@ -746,33 +754,33 @@ class WP_Filesystem_Base {
* Default 0. * Default 0.
* @param int $atime Optional. Access time to set for file. * @param int $atime Optional. Access time to set for file.
* Default 0. * Default 0.
* @return bool Whether operation was successful or not. * @return bool True on success, false on failure.
*/ */
public function touch( $file, $time = 0, $atime = 0 ) { public function touch( $file, $time = 0, $atime = 0 ) {
return false; return false;
} }
/** /**
* Create a directory. * Creates a directory.
* *
* @since 2.5.0 * @since 2.5.0
* @abstract * @abstract
* *
* @param string $path Path for new directory. * @param string $path Path for new directory.
* @param mixed $chmod Optional. The permissions as octal number, (or False to skip chmod) * @param int|false $chmod Optional. The permissions as octal number (or false to skip chmod).
* Default false. * Default false.
* @param mixed $chown Optional. A user name or number (or False to skip chown) * @param string|int $chown Optional. A user name or number (or false to skip chown).
* Default false. * Default false.
* @param mixed $chgrp Optional. A group name or number (or False to skip chgrp). * @param string|int $chgrp Optional. A group name or number (or false to skip chgrp).
* Default false. * Default false.
* @return bool False if directory cannot be created, true otherwise. * @return bool True on success, false on failure.
*/ */
public function mkdir( $path, $chmod = false, $chown = false, $chgrp = false ) { public function mkdir( $path, $chmod = false, $chown = false, $chgrp = false ) {
return false; return false;
} }
/** /**
* Delete a directory. * Deletes a directory.
* *
* @since 2.5.0 * @since 2.5.0
* @abstract * @abstract
@ -780,14 +788,14 @@ class WP_Filesystem_Base {
* @param string $path Path to directory. * @param string $path Path to directory.
* @param bool $recursive Optional. Whether to recursively remove files/directories. * @param bool $recursive Optional. Whether to recursively remove files/directories.
* Default false. * Default false.
* @return bool Whether directory is deleted successfully or not. * @return bool True on success, false on failure.
*/ */
public function rmdir( $path, $recursive = false ) { public function rmdir( $path, $recursive = false ) {
return false; return false;
} }
/** /**
* Get details for files in a directory or a specific file. * Gets details for files in a directory or a specific file.
* *
* @since 2.5.0 * @since 2.5.0
* @abstract * @abstract
@ -797,10 +805,10 @@ class WP_Filesystem_Base {
* Default true. * Default true.
* @param bool $recursive Optional. Whether to recursively include file details in nested directories. * @param bool $recursive Optional. Whether to recursively include file details in nested directories.
* Default false. * Default false.
* @return array|bool { * @return array|false {
* Array of files. False if unable to list directory contents. * Array of files. False if unable to list directory contents.
* *
* @type string $name Name of the file/directory. * @type string $name Name of the file or directory.
* @type string $perms *nix representation of permissions. * @type string $perms *nix representation of permissions.
* @type int $permsn Octal representation of permissions. * @type int $permsn Octal representation of permissions.
* @type string $owner Owner name or ID. * @type string $owner Owner name or ID.

View File

@ -16,9 +16,11 @@
class WP_Filesystem_Direct extends WP_Filesystem_Base { class WP_Filesystem_Direct extends WP_Filesystem_Base {
/** /**
* constructor * Constructor.
* *
* @param mixed $arg ignored argument * @since 2.5.0
*
* @param mixed $arg Not used.
*/ */
public function __construct( $arg ) { public function __construct( $arg ) {
$this->method = 'direct'; $this->method = 'direct';
@ -26,33 +28,39 @@ class WP_Filesystem_Direct extends WP_Filesystem_Base {
} }
/** /**
* Reads entire file into a string * Reads entire file into a string.
*
* @since 2.5.0
* *
* @param string $file Name of the file to read. * @param string $file Name of the file to read.
* @return string|bool The function returns the read data or false on failure. * @return string|false Read data on success, false on failure.
*/ */
public function get_contents( $file ) { public function get_contents( $file ) {
return @file_get_contents( $file ); return @file_get_contents( $file );
} }
/** /**
* Reads entire file into an array * Reads entire file into an array.
*
* @since 2.5.0
* *
* @param string $file Path to the file. * @param string $file Path to the file.
* @return array|bool the file contents in an array or false on failure. * @return array|false File contents in an array on success, false on failure.
*/ */
public function get_contents_array( $file ) { public function get_contents_array( $file ) {
return @file( $file ); return @file( $file );
} }
/** /**
* Write a string to a file * Writes a string to a file.
* *
* @param string $file Remote path to the file where to write the data. * @since 2.5.0
* @param string $contents The data to write. *
* @param int $mode Optional. The file permissions as octal number, usually 0644. * @param string $file Remote path to the file where to write the data.
* Default false. * @param string $contents The data to write.
* @return bool False upon failure, true otherwise. * @param int|false $mode Optional. The file permissions as octal number, usually 0644.
* Default false.
* @return bool True on success, false on failure.
*/ */
public function put_contents( $file, $contents, $mode = false ) { public function put_contents( $file, $contents, $mode = false ) {
$fp = @fopen( $file, 'wb' ); $fp = @fopen( $file, 'wb' );
@ -80,31 +88,38 @@ class WP_Filesystem_Direct extends WP_Filesystem_Base {
} }
/** /**
* Gets the current working directory * Gets the current working directory.
* *
* @return string|bool the current working directory on success, or false on failure. * @since 2.5.0
*
* @return string|false The current working directory on success, false on failure.
*/ */
public function cwd() { public function cwd() {
return @getcwd(); return @getcwd();
} }
/** /**
* Change directory * Changes current directory.
*
* @since 2.5.0
* *
* @param string $dir The new current directory. * @param string $dir The new current directory.
* @return bool Returns true on success or false on failure. * @return bool True on success, false on failure.
*/ */
public function chdir( $dir ) { public function chdir( $dir ) {
return @chdir( $dir ); return @chdir( $dir );
} }
/** /**
* Changes file group * Changes the file group.
* *
* @param string $file Path to the file. * @since 2.5.0
* @param mixed $group A group name or number. *
* @param bool $recursive Optional. If set True changes file group recursively. Default false. * @param string $file Path to the file.
* @return bool Returns true on success or false on failure. * @param string|int $group A group name or number.
* @param bool $recursive Optional. If set to true, changes file group recursively.
* Default false.
* @return bool True on success, false on failure.
*/ */
public function chgrp( $file, $group, $recursive = false ) { public function chgrp( $file, $group, $recursive = false ) {
if ( ! $this->exists( $file ) ) { if ( ! $this->exists( $file ) ) {
@ -127,13 +142,16 @@ class WP_Filesystem_Direct extends WP_Filesystem_Base {
} }
/** /**
* Changes filesystem permissions * Changes filesystem permissions.
* *
* @param string $file Path to the file. * @since 2.5.0
* @param int $mode Optional. The permissions as octal number, usually 0644 for files, *
* 0755 for dirs. Default false. * @param string $file Path to the file.
* @param bool $recursive Optional. If set True changes file group recursively. Default false. * @param int|false $mode Optional. The permissions as octal number, usually 0644 for files,
* @return bool Returns true on success or false on failure. * 0755 for directories. Default false.
* @param bool $recursive Optional. If set to true, changes file group recursively.
* Default false.
* @return bool True on success, false on failure.
*/ */
public function chmod( $file, $mode = false, $recursive = false ) { public function chmod( $file, $mode = false, $recursive = false ) {
if ( ! $mode ) { if ( ! $mode ) {
@ -160,13 +178,15 @@ class WP_Filesystem_Direct extends WP_Filesystem_Base {
} }
/** /**
* Changes file owner * Changes the owner of a file or directory.
* *
* @param string $file Path to the file. * @since 2.5.0
* @param mixed $owner A user name or number. *
* @param bool $recursive Optional. If set True changes file owner recursively. * @param string $file Path to the file or directory.
* Default false. * @param string|int $owner A user name or number.
* @return bool Returns true on success or false on failure. * @param bool $recursive Optional. If set to true, changes file owner recursively.
* Default false.
* @return bool True on success, false on failure.
*/ */
public function chown( $file, $owner, $recursive = false ) { public function chown( $file, $owner, $recursive = false ) {
if ( ! $this->exists( $file ) ) { if ( ! $this->exists( $file ) ) {
@ -187,10 +207,12 @@ class WP_Filesystem_Direct extends WP_Filesystem_Base {
} }
/** /**
* Gets file owner * Gets the file owner.
*
* @since 2.5.0
* *
* @param string $file Path to the file. * @param string $file Path to the file.
* @return string|bool Username of the user or false on error. * @return string|false Username of the owner on success, false on failure.
*/ */
public function owner( $file ) { public function owner( $file ) {
$owneruid = @fileowner( $file ); $owneruid = @fileowner( $file );
@ -205,20 +227,26 @@ class WP_Filesystem_Direct extends WP_Filesystem_Base {
} }
/** /**
* Gets file permissions * Gets the permissions of the specified file or filepath in their octal format.
* *
* FIXME does not handle errors in fileperms() * FIXME does not handle errors in fileperms()
* *
* @since 2.5.0
*
* @param string $file Path to the file. * @param string $file Path to the file.
* @return string Mode of the file (last 3 digits). * @return string Mode of the file (the last 3 digits).
*/ */
public function getchmod( $file ) { public function getchmod( $file ) {
return substr( decoct( @fileperms( $file ) ), -3 ); return substr( decoct( @fileperms( $file ) ), -3 );
} }
/** /**
* @param string $file * Gets the file's group.
* @return string|false *
* @since 2.5.0
*
* @param string $file Path to the file.
* @return string|false The group on success, false on failure.
*/ */
public function group( $file ) { public function group( $file ) {
$gid = @filegroup( $file ); $gid = @filegroup( $file );
@ -233,11 +261,17 @@ class WP_Filesystem_Direct extends WP_Filesystem_Base {
} }
/** /**
* @param string $source * Copies a file.
* @param string $destination *
* @param bool $overwrite * @since 2.5.0
* @param int $mode *
* @return bool * @param string $source Path to the source file.
* @param string $destination Path to the destination file.
* @param bool $overwrite Optional. Whether to overwrite the destination file if it exists.
* Default false.
* @param int|false $mode Optional. The permissions as octal number, usually 0644 for files,
* 0755 for dirs. Default false.
* @return bool True on success, false on failure.
*/ */
public function copy( $source, $destination, $overwrite = false, $mode = false ) { public function copy( $source, $destination, $overwrite = false, $mode = false ) {
if ( ! $overwrite && $this->exists( $destination ) ) { if ( ! $overwrite && $this->exists( $destination ) ) {
@ -252,10 +286,15 @@ class WP_Filesystem_Direct extends WP_Filesystem_Base {
} }
/** /**
* @param string $source * Moves a file.
* @param string $destination *
* @param bool $overwrite * @since 2.5.0
* @return bool *
* @param string $source Path to the source file.
* @param string $destination Path to the destination file.
* @param bool $overwrite Optional. Whether to overwrite the destination file if it exists.
* Default false.
* @return bool True on success, false on failure.
*/ */
public function move( $source, $destination, $overwrite = false ) { public function move( $source, $destination, $overwrite = false ) {
if ( ! $overwrite && $this->exists( $destination ) ) { if ( ! $overwrite && $this->exists( $destination ) ) {
@ -276,10 +315,16 @@ class WP_Filesystem_Direct extends WP_Filesystem_Base {
} }
/** /**
* @param string $file * Deletes a file or directory.
* @param bool $recursive *
* @param string $type * @since 2.5.0
* @return bool *
* @param string $file Path to the file or directory.
* @param bool $recursive Optional. If set to true, changes file group recursively.
* Default false.
* @param string|false $type Type of resource. 'f' for file, 'd' for directory.
* Default false.
* @return bool True on success, false on failure.
*/ */
public function delete( $file, $recursive = false, $type = false ) { public function delete( $file, $recursive = false, $type = false ) {
if ( empty( $file ) ) { // Some filesystems report this as /, which can cause non-expected recursive deletion of all files in the filesystem. if ( empty( $file ) ) { // Some filesystems report this as /, which can cause non-expected recursive deletion of all files in the filesystem.
@ -313,73 +358,116 @@ class WP_Filesystem_Direct extends WP_Filesystem_Base {
return $retval; return $retval;
} }
/** /**
* @param string $file * Checks if a file or directory exists.
* @return bool *
* @since 2.5.0
*
* @param string $file Path to file or directory.
* @return bool Whether $file exists or not.
*/ */
public function exists( $file ) { public function exists( $file ) {
return @file_exists( $file ); return @file_exists( $file );
} }
/** /**
* @param string $file * Checks if resource is a file.
* @return bool *
* @since 2.5.0
*
* @param string $file File path.
* @return bool Whether $file is a file.
*/ */
public function is_file( $file ) { public function is_file( $file ) {
return @is_file( $file ); return @is_file( $file );
} }
/** /**
* @param string $path * Checks if resource is a directory.
* @return bool *
* @since 2.5.0
*
* @param string $path Directory path.
* @return bool Whether $path is a directory.
*/ */
public function is_dir( $path ) { public function is_dir( $path ) {
return @is_dir( $path ); return @is_dir( $path );
} }
/** /**
* @param string $file * Checks if a file is readable.
* @return bool *
* @since 2.5.0
*
* @param string $file Path to file.
* @return bool Whether $file is readable.
*/ */
public function is_readable( $file ) { public function is_readable( $file ) {
return @is_readable( $file ); return @is_readable( $file );
} }
/** /**
* @param string $file * Checks if a file or directory is writable.
* @return bool *
* @since 2.5.0
*
* @param string $file Path to file or directory.
* @return bool Whether $file is writable.
*/ */
public function is_writable( $file ) { public function is_writable( $file ) {
return @is_writable( $file ); return @is_writable( $file );
} }
/** /**
* @param string $file * Gets the file's last access time.
* @return int *
* @since 2.5.0
*
* @param string $file Path to file.
* @return int|false Unix timestamp representing last access time, false on failure.
*/ */
public function atime( $file ) { public function atime( $file ) {
return @fileatime( $file ); return @fileatime( $file );
} }
/** /**
* @param string $file * Gets the file modification time.
* @return int *
* @since 2.5.0
*
* @param string $file Path to file.
* @return int|false Unix timestamp representing modification time, false on failure.
*/ */
public function mtime( $file ) { public function mtime( $file ) {
return @filemtime( $file ); return @filemtime( $file );
} }
/** /**
* @param string $file * Gets the file size (in bytes).
* @return int *
* @since 2.5.0
*
* @param string $file Path to file.
* @return int|false Size of the file in bytes on success, false on failure.
*/ */
public function size( $file ) { public function size( $file ) {
return @filesize( $file ); return @filesize( $file );
} }
/** /**
* @param string $file * Sets the access and modification times of a file.
* @param int $time *
* @param int $atime * Note: If $file doesn't exist, it will be created.
* @return bool *
* @since 2.5.0
*
* @param string $file Path to file.
* @param int $time Optional. Modified time to set for file.
* Default 0.
* @param int $atime Optional. Access time to set for file.
* Default 0.
* @return bool True on success, false on failure.
*/ */
public function touch( $file, $time = 0, $atime = 0 ) { public function touch( $file, $time = 0, $atime = 0 ) {
if ( $time == 0 ) { if ( $time == 0 ) {
@ -392,11 +480,18 @@ class WP_Filesystem_Direct extends WP_Filesystem_Base {
} }
/** /**
* @param string $path * Creates a directory.
* @param mixed $chmod *
* @param mixed $chown * @since 2.5.0
* @param mixed $chgrp *
* @return bool * @param string $path Path for new directory.
* @param int|false $chmod Optional. The permissions as octal number (or false to skip chmod).
* Default false.
* @param string|int $chown Optional. A user name or number (or false to skip chown).
* Default false.
* @param string|int $chgrp Optional. A group name or number (or false to skip chgrp).
* Default false.
* @return bool True on success, false on failure.
*/ */
public function mkdir( $path, $chmod = false, $chown = false, $chgrp = false ) { public function mkdir( $path, $chmod = false, $chown = false, $chgrp = false ) {
// Safe mode fails with a trailing slash under certain PHP versions. // Safe mode fails with a trailing slash under certain PHP versions.
@ -423,19 +518,43 @@ class WP_Filesystem_Direct extends WP_Filesystem_Base {
} }
/** /**
* @param string $path * Deletes a directory.
* @param bool $recursive *
* @return bool * @since 2.5.0
*
* @param string $path Path to directory.
* @param bool $recursive Optional. Whether to recursively remove files/directories.
* Default false.
* @return bool True on success, false on failure.
*/ */
public function rmdir( $path, $recursive = false ) { public function rmdir( $path, $recursive = false ) {
return $this->delete( $path, $recursive ); return $this->delete( $path, $recursive );
} }
/** /**
* @param string $path * Gets details for files in a directory or a specific file.
* @param bool $include_hidden *
* @param bool $recursive * @since 2.5.0
* @return bool|array *
* @param string $path Path to directory or file.
* @param bool $include_hidden Optional. Whether to include details of hidden ("." prefixed) files.
* Default true.
* @param bool $recursive Optional. Whether to recursively include file details in nested directories.
* Default false.
* @return array|false {
* Array of files. False if unable to list directory contents.
*
* @type string $name Name of the file or directory.
* @type string $perms *nix representation of permissions.
* @type int $permsn Octal representation of permissions.
* @type string $owner Owner name or ID.
* @type int $size Size of file in bytes.
* @type int $lastmodunix Last modified unix timestamp.
* @type mixed $lastmod Last modified month (3 letter) and day (without leading 0).
* @type int $time Last modified time.
* @type string $type Type of resource. 'f' for file, 'd' for directory.
* @type mixed $files If a directory and $recursive is true, contains another array of files.
* }
*/ */
public function dirlist( $path, $include_hidden = true, $recursive = false ) { public function dirlist( $path, $include_hidden = true, $recursive = false ) {
if ( $this->is_file( $path ) ) { if ( $this->is_file( $path ) ) {

View File

@ -14,9 +14,18 @@
* @see WP_Filesystem_Base * @see WP_Filesystem_Base
*/ */
class WP_Filesystem_FTPext extends WP_Filesystem_Base { class WP_Filesystem_FTPext extends WP_Filesystem_Base {
/**
* @since 2.5.0
* @var resource
*/
public $link; public $link;
/** /**
* Constructor.
*
* @since 2.5.0
*
* @param array $opt * @param array $opt
*/ */
public function __construct( $opt = '' ) { public function __construct( $opt = '' ) {
@ -67,7 +76,11 @@ class WP_Filesystem_FTPext extends WP_Filesystem_Base {
} }
/** /**
* @return bool * Connects filesystem.
*
* @since 2.5.0
*
* @return bool True on success, false on failure.
*/ */
public function connect() { public function connect() {
if ( isset( $this->options['ssl'] ) && $this->options['ssl'] && function_exists( 'ftp_ssl_connect' ) ) { if ( isset( $this->options['ssl'] ) && $this->options['ssl'] && function_exists( 'ftp_ssl_connect' ) ) {
@ -110,12 +123,12 @@ class WP_Filesystem_FTPext extends WP_Filesystem_Base {
} }
/** /**
* Retrieves the file contents. * Reads entire file into a string.
* *
* @since 2.5.0 * @since 2.5.0
* *
* @param string $file Filename. * @param string $file Name of the file to read.
* @return string|false File contents on success, false if no temp file could be opened, * @return string|false Read data on success, false if no temporary file could be opened,
* or if the file couldn't be retrieved. * or if the file couldn't be retrieved.
*/ */
public function get_contents( $file ) { public function get_contents( $file ) {
@ -137,7 +150,7 @@ class WP_Filesystem_FTPext extends WP_Filesystem_Base {
$contents = ''; $contents = '';
while ( ! feof( $temp ) ) { while ( ! feof( $temp ) ) {
$contents .= fread( $temp, 8192 ); $contents .= fread( $temp, 8 * KB_IN_BYTES );
} }
fclose( $temp ); fclose( $temp );
@ -146,18 +159,27 @@ class WP_Filesystem_FTPext extends WP_Filesystem_Base {
} }
/** /**
* @param string $file * Reads entire file into an array.
* @return array *
* @since 2.5.0
*
* @param string $file Path to the file.
* @return array|false File contents in an array on success, false on failure.
*/ */
public function get_contents_array( $file ) { public function get_contents_array( $file ) {
return explode( "\n", $this->get_contents( $file ) ); return explode( "\n", $this->get_contents( $file ) );
} }
/** /**
* @param string $file * Writes a string to a file.
* @param string $contents *
* @param bool|int $mode * @since 2.5.0
* @return bool *
* @param string $file Remote path to the file where to write the data.
* @param string $contents The data to write.
* @param int|false $mode Optional. The file permissions as octal number, usually 0644.
* Default false.
* @return bool True on success, false on failure.
*/ */
public function put_contents( $file, $contents, $mode = false ) { public function put_contents( $file, $contents, $mode = false ) {
$tempfile = wp_tempnam( $file ); $tempfile = wp_tempnam( $file );
@ -194,7 +216,11 @@ class WP_Filesystem_FTPext extends WP_Filesystem_Base {
} }
/** /**
* @return string * Gets the current working directory.
*
* @since 2.5.0
*
* @return string|false The current working directory on success, false on failure.
*/ */
public function cwd() { public function cwd() {
$cwd = @ftp_pwd( $this->link ); $cwd = @ftp_pwd( $this->link );
@ -205,18 +231,28 @@ class WP_Filesystem_FTPext extends WP_Filesystem_Base {
} }
/** /**
* @param string $dir * Changes current directory.
* @return bool *
* @since 2.5.0
*
* @param string $dir The new current directory.
* @return bool True on success, false on failure.
*/ */
public function chdir( $dir ) { public function chdir( $dir ) {
return @ftp_chdir( $this->link, $dir ); return @ftp_chdir( $this->link, $dir );
} }
/** /**
* @param string $file * Changes filesystem permissions.
* @param int $mode *
* @param bool $recursive * @since 2.5.0
* @return bool *
* @param string $file Path to the file.
* @param int|false $mode Optional. The permissions as octal number, usually 0644 for files,
* 0755 for directories. Default false.
* @param bool $recursive Optional. If set to true, changes file group recursively.
* Default false.
* @return bool True on success, false on failure.
*/ */
public function chmod( $file, $mode = false, $recursive = false ) { public function chmod( $file, $mode = false, $recursive = false ) {
if ( ! $mode ) { if ( ! $mode ) {
@ -245,16 +281,25 @@ class WP_Filesystem_FTPext extends WP_Filesystem_Base {
} }
/** /**
* @param string $file * Gets the file owner.
* @return string *
* @since 2.5.0
*
* @param string $file Path to the file.
* @return string|false Username of the owner on success, false on failure.
*/ */
public function owner( $file ) { public function owner( $file ) {
$dir = $this->dirlist( $file ); $dir = $this->dirlist( $file );
return $dir[ $file ]['owner']; return $dir[ $file ]['owner'];
} }
/** /**
* @param string $file * Gets the permissions of the specified file or filepath in their octal format.
* @return string *
* @since 2.5.0
*
* @param string $file Path to the file.
* @return string Mode of the file (the last 3 digits).
*/ */
public function getchmod( $file ) { public function getchmod( $file ) {
$dir = $this->dirlist( $file ); $dir = $this->dirlist( $file );
@ -262,8 +307,12 @@ class WP_Filesystem_FTPext extends WP_Filesystem_Base {
} }
/** /**
* @param string $file * Gets the file's group.
* @return string *
* @since 2.5.0
*
* @param string $file Path to the file.
* @return string|false The group on success, false on failure.
*/ */
public function group( $file ) { public function group( $file ) {
$dir = $this->dirlist( $file ); $dir = $this->dirlist( $file );
@ -271,11 +320,17 @@ class WP_Filesystem_FTPext extends WP_Filesystem_Base {
} }
/** /**
* @param string $source * Copies a file.
* @param string $destination *
* @param bool $overwrite * @since 2.5.0
* @param string|bool $mode *
* @return bool * @param string $source Path to the source file.
* @param string $destination Path to the destination file.
* @param bool $overwrite Optional. Whether to overwrite the destination file if it exists.
* Default false.
* @param int|false $mode Optional. The permissions as octal number, usually 0644 for files,
* 0755 for dirs. Default false.
* @return bool True on success, false on failure.
*/ */
public function copy( $source, $destination, $overwrite = false, $mode = false ) { public function copy( $source, $destination, $overwrite = false, $mode = false ) {
if ( ! $overwrite && $this->exists( $destination ) ) { if ( ! $overwrite && $this->exists( $destination ) ) {
@ -289,20 +344,31 @@ class WP_Filesystem_FTPext extends WP_Filesystem_Base {
} }
/** /**
* @param string $source * Moves a file.
* @param string $destination *
* @param bool $overwrite * @since 2.5.0
* @return bool *
* @param string $source Path to the source file.
* @param string $destination Path to the destination file.
* @param bool $overwrite Optional. Whether to overwrite the destination file if it exists.
* Default false.
* @return bool True on success, false on failure.
*/ */
public function move( $source, $destination, $overwrite = false ) { public function move( $source, $destination, $overwrite = false ) {
return ftp_rename( $this->link, $source, $destination ); return ftp_rename( $this->link, $source, $destination );
} }
/** /**
* @param string $file * Deletes a file or directory.
* @param bool $recursive *
* @param string $type * @since 2.5.0
* @return bool *
* @param string $file Path to the file or directory.
* @param bool $recursive Optional. If set to true, changes file group recursively.
* Default false.
* @param string|false $type Type of resource. 'f' for file, 'd' for directory.
* Default false.
* @return bool True on success, false on failure.
*/ */
public function delete( $file, $recursive = false, $type = false ) { public function delete( $file, $recursive = false, $type = false ) {
if ( empty( $file ) ) { if ( empty( $file ) ) {
@ -325,8 +391,12 @@ class WP_Filesystem_FTPext extends WP_Filesystem_Base {
} }
/** /**
* @param string $file * Checks if a file or directory exists.
* @return bool *
* @since 2.5.0
*
* @param string $file Path to file or directory.
* @return bool Whether $file exists or not.
*/ */
public function exists( $file ) { public function exists( $file ) {
$list = @ftp_nlist( $this->link, $file ); $list = @ftp_nlist( $this->link, $file );
@ -339,16 +409,24 @@ class WP_Filesystem_FTPext extends WP_Filesystem_Base {
} }
/** /**
* @param string $file * Checks if resource is a file.
* @return bool *
* @since 2.5.0
*
* @param string $file File path.
* @return bool Whether $file is a file.
*/ */
public function is_file( $file ) { public function is_file( $file ) {
return $this->exists( $file ) && ! $this->is_dir( $file ); return $this->exists( $file ) && ! $this->is_dir( $file );
} }
/** /**
* @param string $path * Checks if resource is a directory.
* @return bool *
* @since 2.5.0
*
* @param string $path Directory path.
* @return bool Whether $path is a directory.
*/ */
public function is_dir( $path ) { public function is_dir( $path ) {
$cwd = $this->cwd(); $cwd = $this->cwd();
@ -361,59 +439,96 @@ class WP_Filesystem_FTPext extends WP_Filesystem_Base {
} }
/** /**
* @param string $file * Checks if a file is readable.
* @return bool *
* @since 2.5.0
*
* @param string $file Path to file.
* @return bool Whether $file is readable.
*/ */
public function is_readable( $file ) { public function is_readable( $file ) {
return true; return true;
} }
/** /**
* @param string $file * Checks if a file or directory is writable.
* @return bool *
* @since 2.5.0
*
* @param string $file Path to file or directory.
* @return bool Whether $file is writable.
*/ */
public function is_writable( $file ) { public function is_writable( $file ) {
return true; return true;
} }
/** /**
* @param string $file * Gets the file's last access time.
* @return bool *
* @since 2.5.0
*
* @param string $file Path to file.
* @return int|false Unix timestamp representing last access time, false on failure.
*/ */
public function atime( $file ) { public function atime( $file ) {
return false; return false;
} }
/** /**
* @param string $file * Gets the file modification time.
* @return int *
* @since 2.5.0
*
* @param string $file Path to file.
* @return int|false Unix timestamp representing modification time, false on failure.
*/ */
public function mtime( $file ) { public function mtime( $file ) {
return ftp_mdtm( $this->link, $file ); return ftp_mdtm( $this->link, $file );
} }
/** /**
* @param string $file * Gets the file size (in bytes).
* @return int *
* @since 2.5.0
*
* @param string $file Path to file.
* @return int|false Size of the file in bytes on success, false on failure.
*/ */
public function size( $file ) { public function size( $file ) {
return ftp_size( $this->link, $file ); return ftp_size( $this->link, $file );
} }
/** /**
* @param string $file * Sets the access and modification times of a file.
* @return bool *
* Note: If $file doesn't exist, it will be created.
*
* @since 2.5.0
*
* @param string $file Path to file.
* @param int $time Optional. Modified time to set for file.
* Default 0.
* @param int $atime Optional. Access time to set for file.
* Default 0.
* @return bool True on success, false on failure.
*/ */
public function touch( $file, $time = 0, $atime = 0 ) { public function touch( $file, $time = 0, $atime = 0 ) {
return false; return false;
} }
/** /**
* @param string $path * Creates a directory.
* @param mixed $chmod *
* @param mixed $chown * @since 2.5.0
* @param mixed $chgrp *
* @return bool * @param string $path Path for new directory.
* @param int|false $chmod Optional. The permissions as octal number (or false to skip chmod).
* Default false.
* @param string|int $chown Optional. A user name or number (or false to skip chown).
* Default false.
* @param string|int $chgrp Optional. A group name or number (or false to skip chgrp).
* Default false.
* @return bool True on success, false on failure.
*/ */
public function mkdir( $path, $chmod = false, $chown = false, $chgrp = false ) { public function mkdir( $path, $chmod = false, $chown = false, $chgrp = false ) {
$path = untrailingslashit( $path ); $path = untrailingslashit( $path );
@ -429,9 +544,14 @@ class WP_Filesystem_FTPext extends WP_Filesystem_Base {
} }
/** /**
* @param string $path * Deletes a directory.
* @param bool $recursive *
* @return bool * @since 2.5.0
*
* @param string $path Path to directory.
* @param bool $recursive Optional. Whether to recursively remove files/directories.
* Default false.
* @return bool True on success, false on failure.
*/ */
public function rmdir( $path, $recursive = false ) { public function rmdir( $path, $recursive = false ) {
return $this->delete( $path, $recursive ); return $this->delete( $path, $recursive );
@ -523,10 +643,29 @@ class WP_Filesystem_FTPext extends WP_Filesystem_Base {
} }
/** /**
* @param string $path * Gets details for files in a directory or a specific file.
* @param bool $include_hidden *
* @param bool $recursive * @since 2.5.0
* @return bool|array *
* @param string $path Path to directory or file.
* @param bool $include_hidden Optional. Whether to include details of hidden ("." prefixed) files.
* Default true.
* @param bool $recursive Optional. Whether to recursively include file details in nested directories.
* Default false.
* @return array|false {
* Array of files. False if unable to list directory contents.
*
* @type string $name Name of the file or directory.
* @type string $perms *nix representation of permissions.
* @type int $permsn Octal representation of permissions.
* @type string $owner Owner name or ID.
* @type int $size Size of file in bytes.
* @type int $lastmodunix Last modified unix timestamp.
* @type mixed $lastmod Last modified month (3 letter) and day (without leading 0).
* @type int $time Last modified time.
* @type string $type Type of resource. 'f' for file, 'd' for directory.
* @type mixed $files If a directory and $recursive is true, contains another array of files.
* }
*/ */
public function dirlist( $path = '.', $include_hidden = true, $recursive = false ) { public function dirlist( $path = '.', $include_hidden = true, $recursive = false ) {
if ( $this->is_file( $path ) ) { if ( $this->is_file( $path ) ) {
@ -537,13 +676,13 @@ class WP_Filesystem_FTPext extends WP_Filesystem_Base {
} }
$pwd = @ftp_pwd( $this->link ); $pwd = @ftp_pwd( $this->link );
if ( ! @ftp_chdir( $this->link, $path ) ) { // Cant change to folder = folder doesn't exist if ( ! @ftp_chdir( $this->link, $path ) ) { // Can't change to folder = folder doesn't exist.
return false; return false;
} }
$list = @ftp_rawlist( $this->link, '-a', false ); $list = @ftp_rawlist( $this->link, '-a', false );
@ftp_chdir( $this->link, $pwd ); @ftp_chdir( $this->link, $pwd );
if ( empty( $list ) ) { // Empty array = non-existent folder (real folder will show . at least) if ( empty( $list ) ) { // Empty array = non-existent folder (real folder will show . at least).
return false; return false;
} }
@ -585,6 +724,9 @@ class WP_Filesystem_FTPext extends WP_Filesystem_Base {
} }
/** /**
* Destructor.
*
* @since 2.5.0
*/ */
public function __destruct() { public function __destruct() {
if ( $this->link ) { if ( $this->link ) {

View File

@ -14,12 +14,18 @@
* @see WP_Filesystem_Base * @see WP_Filesystem_Base
*/ */
class WP_Filesystem_ftpsockets extends WP_Filesystem_Base { class WP_Filesystem_ftpsockets extends WP_Filesystem_Base {
/** /**
* @since 2.5.0
* @var ftp * @var ftp
*/ */
public $ftp; public $ftp;
/** /**
* Constructor.
*
* @since 2.5.0
*
* @param array $opt * @param array $opt
*/ */
public function __construct( $opt = '' ) { public function __construct( $opt = '' ) {
@ -59,7 +65,11 @@ class WP_Filesystem_ftpsockets extends WP_Filesystem_Base {
} }
/** /**
* @return bool * Connects filesystem.
*
* @since 2.5.0
*
* @return bool True on success, false on failure.
*/ */
public function connect() { public function connect() {
if ( ! $this->ftp ) { if ( ! $this->ftp ) {
@ -111,13 +121,13 @@ class WP_Filesystem_ftpsockets extends WP_Filesystem_Base {
} }
/** /**
* Retrieves the file contents. * Reads entire file into a string.
* *
* @since 2.5.0 * @since 2.5.0
* *
* @param string $file Filename. * @param string $file Name of the file to read.
* @return string|false File contents on success, false if no temp file could be opened, * @return string|false Read data on success, false if no temporary file could be opened,
* or if the file doesn't exist. * or if the file couldn't be retrieved.
*/ */
public function get_contents( $file ) { public function get_contents( $file ) {
if ( ! $this->exists( $file ) ) { if ( ! $this->exists( $file ) ) {
@ -148,7 +158,7 @@ class WP_Filesystem_ftpsockets extends WP_Filesystem_Base {
$contents = ''; $contents = '';
while ( ! feof( $temphandle ) ) { while ( ! feof( $temphandle ) ) {
$contents .= fread( $temphandle, 8192 ); $contents .= fread( $temphandle, 8 * KB_IN_BYTES );
} }
fclose( $temphandle ); fclose( $temphandle );
@ -157,18 +167,27 @@ class WP_Filesystem_ftpsockets extends WP_Filesystem_Base {
} }
/** /**
* @param string $file * Reads entire file into an array.
* @return array *
* @since 2.5.0
*
* @param string $file Path to the file.
* @return array|false File contents in an array on success, false on failure.
*/ */
public function get_contents_array( $file ) { public function get_contents_array( $file ) {
return explode( "\n", $this->get_contents( $file ) ); return explode( "\n", $this->get_contents( $file ) );
} }
/** /**
* @param string $file * Writes a string to a file.
* @param string $contents *
* @param int|bool $mode * @since 2.5.0
* @return bool *
* @param string $file Remote path to the file where to write the data.
* @param string $contents The data to write.
* @param int|false $mode Optional. The file permissions as octal number, usually 0644.
* Default false.
* @return bool True on success, false on failure.
*/ */
public function put_contents( $file, $contents, $mode = false ) { public function put_contents( $file, $contents, $mode = false ) {
$temp = wp_tempnam( $file ); $temp = wp_tempnam( $file );
@ -205,7 +224,11 @@ class WP_Filesystem_ftpsockets extends WP_Filesystem_Base {
} }
/** /**
* @return string * Gets the current working directory.
*
* @since 2.5.0
*
* @return string|false The current working directory on success, false on failure.
*/ */
public function cwd() { public function cwd() {
$cwd = $this->ftp->pwd(); $cwd = $this->ftp->pwd();
@ -216,18 +239,28 @@ class WP_Filesystem_ftpsockets extends WP_Filesystem_Base {
} }
/** /**
* @param string $file * Changes current directory.
* @return bool *
* @since 2.5.0
*
* @param string $dir The new current directory.
* @return bool True on success, false on failure.
*/ */
public function chdir( $file ) { public function chdir( $dir ) {
return $this->ftp->chdir( $file ); return $this->ftp->chdir( $dir );
} }
/** /**
* @param string $file * Changes filesystem permissions.
* @param int|bool $mode *
* @param bool $recursive * @since 2.5.0
* @return bool *
* @param string $file Path to the file.
* @param int|false $mode Optional. The permissions as octal number, usually 0644 for files,
* 0755 for directories. Default false.
* @param bool $recursive Optional. If set to true, changes file group recursively.
* Default false.
* @return bool True on success, false on failure.
*/ */
public function chmod( $file, $mode = false, $recursive = false ) { public function chmod( $file, $mode = false, $recursive = false ) {
if ( ! $mode ) { if ( ! $mode ) {
@ -253,8 +286,12 @@ class WP_Filesystem_ftpsockets extends WP_Filesystem_Base {
} }
/** /**
* @param string $file * Gets the file owner.
* @return string *
* @since 2.5.0
*
* @param string $file Path to the file.
* @return string|false Username of the owner on success, false on failure.
*/ */
public function owner( $file ) { public function owner( $file ) {
$dir = $this->dirlist( $file ); $dir = $this->dirlist( $file );
@ -262,8 +299,12 @@ class WP_Filesystem_ftpsockets extends WP_Filesystem_Base {
} }
/** /**
* @param string $file * Gets the permissions of the specified file or filepath in their octal format.
* @return string *
* @since 2.5.0
*
* @param string $file Path to the file.
* @return string Mode of the file (the last 3 digits).
*/ */
public function getchmod( $file ) { public function getchmod( $file ) {
$dir = $this->dirlist( $file ); $dir = $this->dirlist( $file );
@ -271,8 +312,12 @@ class WP_Filesystem_ftpsockets extends WP_Filesystem_Base {
} }
/** /**
* @param string $file * Gets the file's group.
* @return string *
* @since 2.5.0
*
* @param string $file Path to the file.
* @return string|false The group on success, false on failure.
*/ */
public function group( $file ) { public function group( $file ) {
$dir = $this->dirlist( $file ); $dir = $this->dirlist( $file );
@ -280,11 +325,17 @@ class WP_Filesystem_ftpsockets extends WP_Filesystem_Base {
} }
/** /**
* @param string $source * Copies a file.
* @param string $destination *
* @param bool $overwrite * @since 2.5.0
* @param int|bool $mode *
* @return bool * @param string $source Path to the source file.
* @param string $destination Path to the destination file.
* @param bool $overwrite Optional. Whether to overwrite the destination file if it exists.
* Default false.
* @param int|false $mode Optional. The permissions as octal number, usually 0644 for files,
* 0755 for dirs. Default false.
* @return bool True on success, false on failure.
*/ */
public function copy( $source, $destination, $overwrite = false, $mode = false ) { public function copy( $source, $destination, $overwrite = false, $mode = false ) {
if ( ! $overwrite && $this->exists( $destination ) ) { if ( ! $overwrite && $this->exists( $destination ) ) {
@ -300,20 +351,31 @@ class WP_Filesystem_ftpsockets extends WP_Filesystem_Base {
} }
/** /**
* @param string $source * Moves a file.
* @param string $destination *
* @param bool $overwrite * @since 2.5.0
* @return bool *
* @param string $source Path to the source file.
* @param string $destination Path to the destination file.
* @param bool $overwrite Optional. Whether to overwrite the destination file if it exists.
* Default false.
* @return bool True on success, false on failure.
*/ */
public function move( $source, $destination, $overwrite = false ) { public function move( $source, $destination, $overwrite = false ) {
return $this->ftp->rename( $source, $destination ); return $this->ftp->rename( $source, $destination );
} }
/** /**
* @param string $file * Deletes a file or directory.
* @param bool $recursive *
* @param string $type * @since 2.5.0
* @return bool *
* @param string $file Path to the file or directory.
* @param bool $recursive Optional. If set to true, changes file group recursively.
* Default false.
* @param string|false $type Type of resource. 'f' for file, 'd' for directory.
* Default false.
* @return bool True on success, false on failure.
*/ */
public function delete( $file, $recursive = false, $type = false ) { public function delete( $file, $recursive = false, $type = false ) {
if ( empty( $file ) ) { if ( empty( $file ) ) {
@ -330,8 +392,12 @@ class WP_Filesystem_ftpsockets extends WP_Filesystem_Base {
} }
/** /**
* @param string $file * Checks if a file or directory exists.
* @return bool *
* @since 2.5.0
*
* @param string $file Path to file or directory.
* @return bool Whether $file exists or not.
*/ */
public function exists( $file ) { public function exists( $file ) {
$list = $this->ftp->nlist( $file ); $list = $this->ftp->nlist( $file );
@ -345,8 +411,12 @@ class WP_Filesystem_ftpsockets extends WP_Filesystem_Base {
} }
/** /**
* @param string $file * Checks if resource is a file.
* @return bool *
* @since 2.5.0
*
* @param string $file File path.
* @return bool Whether $file is a file.
*/ */
public function is_file( $file ) { public function is_file( $file ) {
if ( $this->is_dir( $file ) ) { if ( $this->is_dir( $file ) ) {
@ -359,8 +429,12 @@ class WP_Filesystem_ftpsockets extends WP_Filesystem_Base {
} }
/** /**
* @param string $path * Checks if resource is a directory.
* @return bool *
* @since 2.5.0
*
* @param string $path Directory path.
* @return bool Whether $path is a directory.
*/ */
public function is_dir( $path ) { public function is_dir( $path ) {
$cwd = $this->cwd(); $cwd = $this->cwd();
@ -372,61 +446,96 @@ class WP_Filesystem_ftpsockets extends WP_Filesystem_Base {
} }
/** /**
* @param string $file * Checks if a file is readable.
* @return bool *
* @since 2.5.0
*
* @param string $file Path to file.
* @return bool Whether $file is readable.
*/ */
public function is_readable( $file ) { public function is_readable( $file ) {
return true; return true;
} }
/** /**
* @param string $file * Checks if a file or directory is writable.
* @return bool *
* @since 2.5.0
*
* @param string $file Path to file or directory.
* @return bool Whether $file is writable.
*/ */
public function is_writable( $file ) { public function is_writable( $file ) {
return true; return true;
} }
/** /**
* @param string $file * Gets the file's last access time.
* @return bool *
* @since 2.5.0
*
* @param string $file Path to file.
* @return int|false Unix timestamp representing last access time, false on failure.
*/ */
public function atime( $file ) { public function atime( $file ) {
return false; return false;
} }
/** /**
* @param string $file * Gets the file modification time.
* @return int *
* @since 2.5.0
*
* @param string $file Path to file.
* @return int|false Unix timestamp representing modification time, false on failure.
*/ */
public function mtime( $file ) { public function mtime( $file ) {
return $this->ftp->mdtm( $file ); return $this->ftp->mdtm( $file );
} }
/** /**
* @param string $file * Gets the file size (in bytes).
* @return int *
* @since 2.5.0
*
* @param string $file Path to file.
* @return int|false Size of the file in bytes on success, false on failure.
*/ */
public function size( $file ) { public function size( $file ) {
return $this->ftp->filesize( $file ); return $this->ftp->filesize( $file );
} }
/** /**
* @param string $file * Sets the access and modification times of a file.
* @param int $time *
* @param int $atime * Note: If $file doesn't exist, it will be created.
* @return bool *
* @since 2.5.0
*
* @param string $file Path to file.
* @param int $time Optional. Modified time to set for file.
* Default 0.
* @param int $atime Optional. Access time to set for file.
* Default 0.
* @return bool True on success, false on failure.
*/ */
public function touch( $file, $time = 0, $atime = 0 ) { public function touch( $file, $time = 0, $atime = 0 ) {
return false; return false;
} }
/** /**
* @param string $path * Creates a directory.
* @param mixed $chmod *
* @param mixed $chown * @since 2.5.0
* @param mixed $chgrp *
* @return bool * @param string $path Path for new directory.
* @param int|false $chmod Optional. The permissions as octal number (or false to skip chmod).
* Default false.
* @param string|int $chown Optional. A user name or number (or false to skip chown).
* Default false.
* @param string|int $chgrp Optional. A group name or number (or false to skip chgrp).
* Default false.
* @return bool True on success, false on failure.
*/ */
public function mkdir( $path, $chmod = false, $chown = false, $chgrp = false ) { public function mkdir( $path, $chmod = false, $chown = false, $chgrp = false ) {
$path = untrailingslashit( $path ); $path = untrailingslashit( $path );
@ -445,19 +554,43 @@ class WP_Filesystem_ftpsockets extends WP_Filesystem_Base {
} }
/** /**
* @param string $path * Deletes a directory.
* @param bool $recursive *
* @return bool * @since 2.5.0
*
* @param string $path Path to directory.
* @param bool $recursive Optional. Whether to recursively remove files/directories.
* Default false.
* @return bool True on success, false on failure.
*/ */
public function rmdir( $path, $recursive = false ) { public function rmdir( $path, $recursive = false ) {
return $this->delete( $path, $recursive ); return $this->delete( $path, $recursive );
} }
/** /**
* @param string $path * Gets details for files in a directory or a specific file.
* @param bool $include_hidden *
* @param bool $recursive * @since 2.5.0
* @return bool|array *
* @param string $path Path to directory or file.
* @param bool $include_hidden Optional. Whether to include details of hidden ("." prefixed) files.
* Default true.
* @param bool $recursive Optional. Whether to recursively include file details in nested directories.
* Default false.
* @return array|false {
* Array of files. False if unable to list directory contents.
*
* @type string $name Name of the file or directory.
* @type string $perms *nix representation of permissions.
* @type int $permsn Octal representation of permissions.
* @type string $owner Owner name or ID.
* @type int $size Size of file in bytes.
* @type int $lastmodunix Last modified unix timestamp.
* @type mixed $lastmod Last modified month (3 letter) and day (without leading 0).
* @type int $time Last modified time.
* @type string $type Type of resource. 'f' for file, 'd' for directory.
* @type mixed $files If a directory and $recursive is true, contains another array of files.
* }
*/ */
public function dirlist( $path = '.', $include_hidden = true, $recursive = false ) { public function dirlist( $path = '.', $include_hidden = true, $recursive = false ) {
if ( $this->is_file( $path ) ) { if ( $this->is_file( $path ) ) {
@ -517,6 +650,9 @@ class WP_Filesystem_ftpsockets extends WP_Filesystem_Base {
} }
/** /**
* Destructor.
*
* @since 2.5.0
*/ */
public function __destruct() { public function __destruct() {
$this->ftp->quit(); $this->ftp->quit();

View File

@ -36,16 +36,28 @@
class WP_Filesystem_SSH2 extends WP_Filesystem_Base { class WP_Filesystem_SSH2 extends WP_Filesystem_Base {
/** /**
* @since 2.7.0
* @var resource
*/ */
public $link = false; public $link = false;
/** /**
* @since 2.7.0
* @var resource * @var resource
*/ */
public $sftp_link; public $sftp_link;
/**
* @since 2.7.0
* @var bool
*/
public $keys = false; public $keys = false;
/** /**
* Constructor.
*
* @since 2.7.0
*
* @param array $opt * @param array $opt
*/ */
public function __construct( $opt = '' ) { public function __construct( $opt = '' ) {
@ -109,7 +121,11 @@ class WP_Filesystem_SSH2 extends WP_Filesystem_Base {
} }
/** /**
* @return bool * Connects filesystem.
*
* @since 2.7.0
*
* @return bool True on success, false on failure.
*/ */
public function connect() { public function connect() {
if ( ! $this->keys ) { if ( ! $this->keys ) {
@ -193,6 +209,8 @@ class WP_Filesystem_SSH2 extends WP_Filesystem_Base {
} }
/** /**
* @since 2.7.0
*
* @param string $command * @param string $command
* @param bool $returnbool * @param bool $returnbool
* @return bool|string True on success, false on failure. String if the command was executed, `$returnbool` * @return bool|string True on success, false on failure. String if the command was executed, `$returnbool`
@ -228,26 +246,40 @@ class WP_Filesystem_SSH2 extends WP_Filesystem_Base {
} }
/** /**
* @param string $file * Reads entire file into a string.
* @return string|false *
* @since 2.7.0
*
* @param string $file Name of the file to read.
* @return string|false Read data on success, false if no temporary file could be opened,
* or if the file couldn't be retrieved.
*/ */
public function get_contents( $file ) { public function get_contents( $file ) {
return file_get_contents( $this->sftp_path( $file ) ); return file_get_contents( $this->sftp_path( $file ) );
} }
/** /**
* @param string $file * Reads entire file into an array.
* @return array *
* @since 2.7.0
*
* @param string $file Path to the file.
* @return array|false File contents in an array on success, false on failure.
*/ */
public function get_contents_array( $file ) { public function get_contents_array( $file ) {
return file( $this->sftp_path( $file ) ); return file( $this->sftp_path( $file ) );
} }
/** /**
* @param string $file * Writes a string to a file.
* @param string $contents *
* @param bool|int $mode * @since 2.7.0
* @return bool *
* @param string $file Remote path to the file where to write the data.
* @param string $contents The data to write.
* @param int|false $mode Optional. The file permissions as octal number, usually 0644.
* Default false.
* @return bool True on success, false on failure.
*/ */
public function put_contents( $file, $contents, $mode = false ) { public function put_contents( $file, $contents, $mode = false ) {
$ret = file_put_contents( $this->sftp_path( $file ), $contents ); $ret = file_put_contents( $this->sftp_path( $file ), $contents );
@ -262,7 +294,11 @@ class WP_Filesystem_SSH2 extends WP_Filesystem_Base {
} }
/** /**
* @return bool * Gets the current working directory.
*
* @since 2.7.0
*
* @return string|false The current working directory on success, false on failure.
*/ */
public function cwd() { public function cwd() {
$cwd = ssh2_sftp_realpath( $this->sftp_link, '.' ); $cwd = ssh2_sftp_realpath( $this->sftp_link, '.' );
@ -273,19 +309,27 @@ class WP_Filesystem_SSH2 extends WP_Filesystem_Base {
} }
/** /**
* @param string $dir * Changes current directory.
* @return bool|string *
* @since 2.7.0
*
* @param string $dir The new current directory.
* @return bool True on success, false on failure.
*/ */
public function chdir( $dir ) { public function chdir( $dir ) {
return $this->run_command( 'cd ' . $dir, true ); return $this->run_command( 'cd ' . $dir, true );
} }
/** /**
* @param string $file * Changes the file group.
* @param string $group
* @param bool $recursive
* *
* @return bool * @since 2.7.0
*
* @param string $file Path to the file.
* @param string|int $group A group name or number.
* @param bool $recursive Optional. If set to true, changes file group recursively.
* Default false.
* @return bool True on success, false on failure.
*/ */
public function chgrp( $file, $group, $recursive = false ) { public function chgrp( $file, $group, $recursive = false ) {
if ( ! $this->exists( $file ) ) { if ( ! $this->exists( $file ) ) {
@ -298,10 +342,16 @@ class WP_Filesystem_SSH2 extends WP_Filesystem_Base {
} }
/** /**
* @param string $file * Changes filesystem permissions.
* @param int $mode *
* @param bool $recursive * @since 2.7.0
* @return bool|string *
* @param string $file Path to the file.
* @param int|false $mode Optional. The permissions as octal number, usually 0644 for files,
* 0755 for directories. Default false.
* @param bool $recursive Optional. If set to true, changes file group recursively.
* Default false.
* @return bool True on success, false on failure.
*/ */
public function chmod( $file, $mode = false, $recursive = false ) { public function chmod( $file, $mode = false, $recursive = false ) {
if ( ! $this->exists( $file ) ) { if ( ! $this->exists( $file ) ) {
@ -325,12 +375,15 @@ class WP_Filesystem_SSH2 extends WP_Filesystem_Base {
} }
/** /**
* Change the ownership of a file / folder. * Changes the owner of a file or directory.
* *
* @param string $file Path to the file. * @since 2.7.0
*
* @param string $file Path to the file or directory.
* @param string|int $owner A user name or number. * @param string|int $owner A user name or number.
* @param bool $recursive Optional. If set True changes file owner recursivly. Default False. * @param bool $recursive Optional. If set to true, changes file owner recursively.
* @return bool True on success or false on failure. * Default false.
* @return bool True on success, false on failure.
*/ */
public function chown( $file, $owner, $recursive = false ) { public function chown( $file, $owner, $recursive = false ) {
if ( ! $this->exists( $file ) ) { if ( ! $this->exists( $file ) ) {
@ -343,8 +396,12 @@ class WP_Filesystem_SSH2 extends WP_Filesystem_Base {
} }
/** /**
* @param string $file * Gets the file owner.
* @return string|false *
* @since 2.7.0
*
* @param string $file Path to the file.
* @return string|false Username of the owner on success, false on failure.
*/ */
public function owner( $file ) { public function owner( $file ) {
$owneruid = @fileowner( $this->sftp_path( $file ) ); $owneruid = @fileowner( $this->sftp_path( $file ) );
@ -359,16 +416,24 @@ class WP_Filesystem_SSH2 extends WP_Filesystem_Base {
} }
/** /**
* @param string $file * Gets the permissions of the specified file or filepath in their octal format.
* @return string *
* @since 2.7.0
*
* @param string $file Path to the file.
* @return string Mode of the file (the last 3 digits).
*/ */
public function getchmod( $file ) { public function getchmod( $file ) {
return substr( decoct( @fileperms( $this->sftp_path( $file ) ) ), -3 ); return substr( decoct( @fileperms( $this->sftp_path( $file ) ) ), -3 );
} }
/** /**
* @param string $file * Gets the file's group.
* @return string|false *
* @since 2.7.0
*
* @param string $file Path to the file.
* @return string|false The group on success, false on failure.
*/ */
public function group( $file ) { public function group( $file ) {
$gid = @filegroup( $this->sftp_path( $file ) ); $gid = @filegroup( $this->sftp_path( $file ) );
@ -383,11 +448,17 @@ class WP_Filesystem_SSH2 extends WP_Filesystem_Base {
} }
/** /**
* @param string $source * Copies a file.
* @param string $destination *
* @param bool $overwrite * @since 2.7.0
* @param int|bool $mode *
* @return bool * @param string $source Path to the source file.
* @param string $destination Path to the destination file.
* @param bool $overwrite Optional. Whether to overwrite the destination file if it exists.
* Default false.
* @param int|false $mode Optional. The permissions as octal number, usually 0644 for files,
* 0755 for dirs. Default false.
* @return bool True on success, false on failure.
*/ */
public function copy( $source, $destination, $overwrite = false, $mode = false ) { public function copy( $source, $destination, $overwrite = false, $mode = false ) {
if ( ! $overwrite && $this->exists( $destination ) ) { if ( ! $overwrite && $this->exists( $destination ) ) {
@ -401,20 +472,31 @@ class WP_Filesystem_SSH2 extends WP_Filesystem_Base {
} }
/** /**
* @param string $source * Moves a file.
* @param string $destination *
* @param bool $overwrite * @since 2.7.0
* @return bool *
* @param string $source Path to the source file.
* @param string $destination Path to the destination file.
* @param bool $overwrite Optional. Whether to overwrite the destination file if it exists.
* Default false.
* @return bool True on success, false on failure.
*/ */
public function move( $source, $destination, $overwrite = false ) { public function move( $source, $destination, $overwrite = false ) {
return @ssh2_sftp_rename( $this->sftp_link, $source, $destination ); return @ssh2_sftp_rename( $this->sftp_link, $source, $destination );
} }
/** /**
* @param string $file * Deletes a file or directory.
* @param bool $recursive *
* @param string|bool $type * @since 2.7.0
* @return bool *
* @param string $file Path to the file or directory.
* @param bool $recursive Optional. If set to true, changes file group recursively.
* Default false.
* @param string|false $type Type of resource. 'f' for file, 'd' for directory.
* Default false.
* @return bool True on success, false on failure.
*/ */
public function delete( $file, $recursive = false, $type = false ) { public function delete( $file, $recursive = false, $type = false ) {
if ( 'f' == $type || $this->is_file( $file ) ) { if ( 'f' == $type || $this->is_file( $file ) ) {
@ -433,40 +515,60 @@ class WP_Filesystem_SSH2 extends WP_Filesystem_Base {
} }
/** /**
* @param string $file * Checks if a file or directory exists.
* @return bool *
* @since 2.7.0
*
* @param string $file Path to file or directory.
* @return bool Whether $file exists or not.
*/ */
public function exists( $file ) { public function exists( $file ) {
return file_exists( $this->sftp_path( $file ) ); return file_exists( $this->sftp_path( $file ) );
} }
/** /**
* @param string $file * Checks if resource is a file.
* @return bool *
* @since 2.7.0
*
* @param string $file File path.
* @return bool Whether $file is a file.
*/ */
public function is_file( $file ) { public function is_file( $file ) {
return is_file( $this->sftp_path( $file ) ); return is_file( $this->sftp_path( $file ) );
} }
/** /**
* @param string $path * Checks if resource is a directory.
* @return bool *
* @since 2.7.0
*
* @param string $path Directory path.
* @return bool Whether $path is a directory.
*/ */
public function is_dir( $path ) { public function is_dir( $path ) {
return is_dir( $this->sftp_path( $path ) ); return is_dir( $this->sftp_path( $path ) );
} }
/** /**
* @param string $file * Checks if a file is readable.
* @return bool *
* @since 2.7.0
*
* @param string $file Path to file.
* @return bool Whether $file is readable.
*/ */
public function is_readable( $file ) { public function is_readable( $file ) {
return is_readable( $this->sftp_path( $file ) ); return is_readable( $this->sftp_path( $file ) );
} }
/** /**
* @param string $file * Checks if a file or directory is writable.
* @return bool *
* @since 2.7.0
*
* @param string $file Path to file or directory.
* @return bool Whether $file is writable.
*/ */
public function is_writable( $file ) { public function is_writable( $file ) {
// PHP will base it's writable checks on system_user === file_owner, not ssh_user === file_owner // PHP will base it's writable checks on system_user === file_owner, not ssh_user === file_owner
@ -474,44 +576,71 @@ class WP_Filesystem_SSH2 extends WP_Filesystem_Base {
} }
/** /**
* @param string $file * Gets the file's last access time.
* @return int *
* @since 2.7.0
*
* @param string $file Path to file.
* @return int|false Unix timestamp representing last access time, false on failure.
*/ */
public function atime( $file ) { public function atime( $file ) {
return fileatime( $this->sftp_path( $file ) ); return fileatime( $this->sftp_path( $file ) );
} }
/** /**
* @param string $file * Gets the file modification time.
* @return int *
* @since 2.7.0
*
* @param string $file Path to file.
* @return int|false Unix timestamp representing modification time, false on failure.
*/ */
public function mtime( $file ) { public function mtime( $file ) {
return filemtime( $this->sftp_path( $file ) ); return filemtime( $this->sftp_path( $file ) );
} }
/** /**
* @param string $file * Gets the file size (in bytes).
* @return int *
* @since 2.7.0
*
* @param string $file Path to file.
* @return int|false Size of the file in bytes on success, false on failure.
*/ */
public function size( $file ) { public function size( $file ) {
return filesize( $this->sftp_path( $file ) ); return filesize( $this->sftp_path( $file ) );
} }
/** /**
* @param string $file * Sets the access and modification times of a file.
* @param int $time *
* @param int $atime * Note: Not implemented.
*
* @since 2.7.0
*
* @param string $file Path to file.
* @param int $time Optional. Modified time to set for file.
* Default 0.
* @param int $atime Optional. Access time to set for file.
* Default 0.
*/ */
public function touch( $file, $time = 0, $atime = 0 ) { public function touch( $file, $time = 0, $atime = 0 ) {
//Not implemented. // Not implemented.
} }
/** /**
* @param string $path * Creates a directory.
* @param mixed $chmod *
* @param mixed $chown * @since 2.7.0
* @param mixed $chgrp *
* @return bool * @param string $path Path for new directory.
* @param int|false $chmod Optional. The permissions as octal number (or false to skip chmod).
* Default false.
* @param string|int $chown Optional. A user name or number (or false to skip chown).
* Default false.
* @param string|int $chgrp Optional. A group name or number (or false to skip chgrp).
* Default false.
* @return bool True on success, false on failure.
*/ */
public function mkdir( $path, $chmod = false, $chown = false, $chgrp = false ) { public function mkdir( $path, $chmod = false, $chown = false, $chgrp = false ) {
$path = untrailingslashit( $path ); $path = untrailingslashit( $path );
@ -535,19 +664,43 @@ class WP_Filesystem_SSH2 extends WP_Filesystem_Base {
} }
/** /**
* @param string $path * Deletes a directory.
* @param bool $recursive *
* @return bool * @since 2.7.0
*
* @param string $path Path to directory.
* @param bool $recursive Optional. Whether to recursively remove files/directories.
* Default false.
* @return bool True on success, false on failure.
*/ */
public function rmdir( $path, $recursive = false ) { public function rmdir( $path, $recursive = false ) {
return $this->delete( $path, $recursive ); return $this->delete( $path, $recursive );
} }
/** /**
* @param string $path * Gets details for files in a directory or a specific file.
* @param bool $include_hidden *
* @param bool $recursive * @since 2.7.0
* @return bool|array *
* @param string $path Path to directory or file.
* @param bool $include_hidden Optional. Whether to include details of hidden ("." prefixed) files.
* Default true.
* @param bool $recursive Optional. Whether to recursively include file details in nested directories.
* Default false.
* @return array|false {
* Array of files. False if unable to list directory contents.
*
* @type string $name Name of the file or directory.
* @type string $perms *nix representation of permissions.
* @type int $permsn Octal representation of permissions.
* @type string $owner Owner name or ID.
* @type int $size Size of file in bytes.
* @type int $lastmodunix Last modified unix timestamp.
* @type mixed $lastmod Last modified month (3 letter) and day (without leading 0).
* @type int $time Last modified time.
* @type string $type Type of resource. 'f' for file, 'd' for directory.
* @type mixed $files If a directory and $recursive is true, contains another array of files.
* }
*/ */
public function dirlist( $path, $include_hidden = true, $recursive = false ) { public function dirlist( $path, $include_hidden = true, $recursive = false ) {
if ( $this->is_file( $path ) ) { if ( $this->is_file( $path ) ) {