diff --git a/wp-admin/includes/class-wp-filesystem-base.php b/wp-admin/includes/class-wp-filesystem-base.php index 9f39c8c8c..ed4e87160 100644 --- a/wp-admin/includes/class-wp-filesystem-base.php +++ b/wp-admin/includes/class-wp-filesystem-base.php @@ -166,6 +166,20 @@ class WP_Filesystem_Base { $newmode .= $mode[6] + $mode[7] + $mode[8]; return $newmode; } + + /** + * Determines if the string provided contains binary characters. + * + * @since 2.7 + * @package WordPress + * @subpackage WP_Filesystem + * + * @param string $text String to test against + * + */ + function is_binary( $text ) { + return (bool) preg_match('|[^\x20-\x7E]|', $text); //chr(32)..chr(127) + } } ?> diff --git a/wp-admin/includes/class-wp-filesystem-ftpext.php b/wp-admin/includes/class-wp-filesystem-ftpext.php index 92d8bc2ac..4860d767d 100644 --- a/wp-admin/includes/class-wp-filesystem-ftpext.php +++ b/wp-admin/includes/class-wp-filesystem-ftpext.php @@ -22,21 +22,6 @@ class WP_Filesystem_FTPext extends WP_Filesystem_Base { var $permission = null; - var $filetypes = array( - 'php'=>FTP_ASCII, - 'css'=>FTP_ASCII, - 'txt'=>FTP_ASCII, - 'js'=>FTP_ASCII, - 'html'=>FTP_ASCII, - 'htm'=>FTP_ASCII, - 'xml'=>FTP_ASCII, - - 'jpg'=>FTP_BINARY, - 'png'=>FTP_BINARY, - 'gif'=>FTP_BINARY, - 'bmp'=>FTP_BINARY - ); - function WP_Filesystem_FTPext($opt='') { $this->method = 'ftpext'; $this->errors = new WP_Error(); @@ -103,20 +88,22 @@ class WP_Filesystem_FTPext extends WP_Filesystem_Base { } function get_contents($file, $type = '', $resumepos = 0 ){ - if( empty($type) ){ - $extension = substr(strrchr($file, "."), 1); - $type = isset($this->filetypes[ $extension ]) ? $this->filetypes[ $extension ] : FTP_ASCII; - } + if( empty($type) ) + $type = FTP_BINARY; + $temp = tmpfile(); if ( ! $temp ) return false; + if( ! @ftp_fget($this->link, $temp, $file, $type, $resumepos) ) return false; + fseek($temp, 0); //Skip back to the start of the file being written to $contents = ''; - while (!feof($temp)) { + + while ( ! feof($temp) ) $contents .= fread($temp, 8192); - } + fclose($temp); return $contents; } @@ -124,16 +111,18 @@ class WP_Filesystem_FTPext extends WP_Filesystem_Base { return explode("\n", $this->get_contents($file)); } function put_contents($file, $contents, $type = '' ) { - if( empty($type) ) { - $extension = substr(strrchr($file, "."), 1); - $type = isset($this->filetypes[ $extension ]) ? $this->filetypes[ $extension ] : FTP_ASCII; - } + if( empty($type) ) + $type = $this->is_binary($contents) ? FTP_BINARY : FTP_ASCII; + $temp = tmpfile(); if ( ! $temp ) return false; + fwrite($temp, $contents); fseek($temp, 0); //Skip back to the start of the file being written to + $ret = @ftp_fput($this->link, $file, $temp, $type); + fclose($temp); return $ret; } diff --git a/wp-admin/includes/class-wp-filesystem-ftpsockets.php b/wp-admin/includes/class-wp-filesystem-ftpsockets.php index 9793eef43..d5ee3f97b 100644 --- a/wp-admin/includes/class-wp-filesystem-ftpsockets.php +++ b/wp-admin/includes/class-wp-filesystem-ftpsockets.php @@ -22,21 +22,6 @@ class WP_Filesystem_ftpsockets extends WP_Filesystem_Base { var $permission = null; - var $filetypes = array( - 'php' => FTP_ASCII, - 'css' => FTP_ASCII, - 'txt' => FTP_ASCII, - 'js' => FTP_ASCII, - 'html'=> FTP_ASCII, - 'htm' => FTP_ASCII, - 'xml' => FTP_ASCII, - - 'jpg' => FTP_BINARY, - 'png' => FTP_BINARY, - 'gif' => FTP_BINARY, - 'bmp' => FTP_BINARY - ); - function WP_Filesystem_ftpsockets($opt = '') { $this->method = 'ftpsockets'; $this->errors = new WP_Error(); @@ -105,23 +90,27 @@ class WP_Filesystem_ftpsockets extends WP_Filesystem_Base { if( ! $this->exists($file) ) return false; - if( empty($type) ){ - $extension = substr(strrchr($file, '.'), 1); - $type = isset($this->filetypes[ $extension ]) ? $this->filetypes[ $extension ] : FTP_AUTOASCII; - } + if( empty($type) ) + $type = FTP_AUTOASCII; $this->ftp->SetType($type); + $temp = wp_tempnam( $file ); + if ( ! $temphandle = fopen($temp, 'w+') ) return false; + if ( ! $this->ftp->fget($temphandle, $file) ) { fclose($temphandle); unlink($temp); return ''; //Blank document, File does exist, Its just blank. } + fseek($temphandle, 0); //Skip back to the start of the file being written to $contents = ''; + while ( ! feof($temphandle) ) $contents .= fread($temphandle, 8192); + fclose($temphandle); unlink($temp); return $contents; @@ -132,10 +121,9 @@ class WP_Filesystem_ftpsockets extends WP_Filesystem_Base { } function put_contents($file, $contents, $type = '' ) { - if( empty($type) ){ - $extension = substr(strrchr($file, '.'), 1); - $type = isset($this->filetypes[ $extension ]) ? $this->filetypes[ $extension ] : FTP_AUTOASCII; - } + if( empty($type) ) + $type = $this->is_binary($contents) ? FTP_BINARY : FTP_ASCII; + $this->ftp->SetType($type); $temp = wp_tempnam( $file ); @@ -143,9 +131,12 @@ class WP_Filesystem_ftpsockets extends WP_Filesystem_Base { unlink($temp); return false; } + fwrite($temphandle, $contents); fseek($temphandle, 0); //Skip back to the start of the file being written to + $ret = $this->ftp->fput($file, $temphandle); + fclose($temphandle); unlink($temp); return $ret;