X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/96bc8e88cf39086a9e0a883b8e2c311fe82a5e97..85ad385665744d9cc3bcd939906309be7268edb3:/wp-admin/includes/class-wp-filesystem-ftpext.php diff --git a/wp-admin/includes/class-wp-filesystem-ftpext.php b/wp-admin/includes/class-wp-filesystem-ftpext.php index 79bacfba..b9e32cdc 100644 --- a/wp-admin/includes/class-wp-filesystem-ftpext.php +++ b/wp-admin/includes/class-wp-filesystem-ftpext.php @@ -23,14 +23,13 @@ class WP_Filesystem_FTPext extends WP_Filesystem_Base { $this->method = 'ftpext'; $this->errors = new WP_Error(); - //Check if possible to use ftp functions. + // Check if possible to use ftp functions. if ( ! extension_loaded('ftp') ) { $this->errors->add('no_ftp_ext', __('The ftp PHP extension is not available')); return false; } - // Set defaults: - //This Class uses the timeout on a per-connection basis, Others use it on a per-action basis. + // This Class uses the timeout on a per-connection basis, Others use it on a per-action basis. if ( ! defined('FS_TIMEOUT') ) define('FS_TIMEOUT', 240); @@ -80,7 +79,7 @@ class WP_Filesystem_FTPext extends WP_Filesystem_Base { return false; } - //Set the Connection to use Passive FTP + // Set the Connection to use Passive FTP @ftp_pasv( $this->link, true ); if ( @ftp_get_option($this->link, FTP_TIMEOUT_SEC) < FS_TIMEOUT ) @ftp_set_option($this->link, FTP_TIMEOUT_SEC, FS_TIMEOUT); @@ -88,20 +87,17 @@ class WP_Filesystem_FTPext extends WP_Filesystem_Base { return true; } - function get_contents($file, $type = '', $resumepos = 0 ) { - if ( empty($type) ) - $type = FTP_BINARY; - + function get_contents( $file ) { $tempfile = wp_tempnam($file); $temp = fopen($tempfile, 'w+'); if ( ! $temp ) return false; - if ( ! @ftp_fget($this->link, $temp, $file, $type, $resumepos) ) + if ( ! @ftp_fget($this->link, $temp, $file, FTP_BINARY ) ) return false; - fseek($temp, 0); //Skip back to the start of the file being written to + fseek( $temp, 0 ); // Skip back to the start of the file being written to $contents = ''; while ( ! feof($temp) ) @@ -111,21 +107,33 @@ class WP_Filesystem_FTPext extends WP_Filesystem_Base { unlink($tempfile); return $contents; } + function get_contents_array($file) { return explode("\n", $this->get_contents($file)); } function put_contents($file, $contents, $mode = false ) { $tempfile = wp_tempnam($file); - $temp = fopen($tempfile, 'w+'); + $temp = fopen( $tempfile, 'wb+' ); if ( ! $temp ) return false; - fwrite($temp, $contents); - fseek($temp, 0); //Skip back to the start of the file being written to + mbstring_binary_safe_encoding(); + + $data_length = strlen( $contents ); + $bytes_written = fwrite( $temp, $contents ); + + reset_mbstring_encoding(); + + if ( $data_length !== $bytes_written ) { + fclose( $temp ); + unlink( $tempfile ); + return false; + } + + fseek( $temp, 0 ); // Skip back to the start of the file being written to - $type = $this->is_binary($contents) ? FTP_BINARY : FTP_ASCII; - $ret = @ftp_fput($this->link, $file, $temp, $type); + $ret = @ftp_fput( $this->link, $file, $temp, FTP_BINARY ); fclose($temp); unlink($tempfile); @@ -134,18 +142,22 @@ class WP_Filesystem_FTPext extends WP_Filesystem_Base { return $ret; } + function cwd() { $cwd = @ftp_pwd($this->link); if ( $cwd ) $cwd = trailingslashit($cwd); return $cwd; } + function chdir($dir) { return @ftp_chdir($this->link, $dir); } + function chgrp($file, $group, $recursive = false ) { return false; } + function chmod($file, $mode = false, $recursive = false) { if ( ! $mode ) { if ( $this->is_file($file) ) @@ -168,29 +180,31 @@ class WP_Filesystem_FTPext extends WP_Filesystem_Base { return (bool)@ftp_site($this->link, sprintf('CHMOD %o %s', $mode, $file)); return (bool)@ftp_chmod($this->link, $mode, $file); } - function chown($file, $owner, $recursive = false ) { - return false; - } + function owner($file) { $dir = $this->dirlist($file); return $dir[$file]['owner']; } + function getchmod($file) { $dir = $this->dirlist($file); return $dir[$file]['permsn']; } + function group($file) { $dir = $this->dirlist($file); return $dir[$file]['group']; } + function copy($source, $destination, $overwrite = false, $mode = false) { if ( ! $overwrite && $this->exists($destination) ) return false; $content = $this->get_contents($source); - if ( false === $content) + if ( false === $content ) return false; return $this->put_contents($destination, $content, $mode); } + function move($source, $destination, $overwrite = false) { return ftp_rename($this->link, $source, $destination); } @@ -214,9 +228,11 @@ class WP_Filesystem_FTPext extends WP_Filesystem_Base { $list = @ftp_nlist($this->link, $file); return !empty($list); //empty list = no file, so invert. } + function is_file($file) { return $this->exists($file) && !$this->is_dir($file); } + function is_dir($path) { $cwd = $this->cwd(); $result = @ftp_chdir($this->link, trailingslashit($path) ); @@ -226,26 +242,31 @@ class WP_Filesystem_FTPext extends WP_Filesystem_Base { } return false; } + function is_readable($file) { - //Get dir list, Check if the file is readable by the current user?? return true; } + function is_writable($file) { - //Get dir list, Check if the file is writable by the current user?? return true; } + function atime($file) { return false; } + function mtime($file) { return ftp_mdtm($this->link, $file); } + function size($file) { return ftp_size($this->link, $file); } + function touch($file, $time = 0, $atime = 0) { return false; } + function mkdir($path, $chmod = false, $chown = false, $chgrp = false) { $path = untrailingslashit($path); if ( empty($path) ) @@ -260,6 +281,7 @@ class WP_Filesystem_FTPext extends WP_Filesystem_Base { $this->chgrp($path, $chgrp); return true; } + function rmdir($path, $recursive = false) { return $this->delete($path, $recursive); } @@ -330,6 +352,10 @@ class WP_Filesystem_FTPext extends WP_Filesystem_Base { } } + // Replace symlinks formatted as "source -> target" with just the source name + if ( $b['islink'] ) + $b['name'] = preg_replace( '/(\s*->\s*.*)$/', '', $b['name'] ); + return $b; } @@ -387,5 +413,3 @@ class WP_Filesystem_FTPext extends WP_Filesystem_Base { ftp_close($this->link); } } - -?>