Ubuntu 14.04
系统上WordPress 4.5
升级到PHP7
之后执行插件升级报错,
1 |
无法定位WordPress内容目录(wp-content) |
如下图所示:
这个是由于PHP
升级之后,有些函数的支持出现了变化,导致调用失败。
目前已知的修复方法是修改wp-admin/includes/class-wp-filesystem-ssh2.php
中的如下的几个函数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
/** * @access public * * @param string $file * @return bool */ public function exists($file) { return file_exists( $this->sftp_path( $file ) ); } /** * @access public * * @param string $file * @return bool */ public function is_file($file) { return is_file( $this->sftp_path( $file ) ); } /** * @access public * * @param string $path * @return bool */ public function is_dir($path) { return is_dir( $this->sftp_path( $path ) ); } /** * @access public * * @param string $file * @return bool */ public function is_readable($file) { return is_readable( $this->sftp_path( $file ) ); } /** * @access public * * @param string $file * @return int */ public function atime($file) { return fileatime( $this->sftp_path( $file ) ); } /** * @access public * * @param string $file * @return int */ public function mtime($file) { return filemtime( $this->sftp_path( $file ) ); } /** * @access public * * @param string $file * @return int */ public function size($file) { return filesize( $this->sftp_path( $file ) ); } |
修改为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 |
/** * @access public * * @param string $file * @return bool */ public function exists($file) { //return file_exists( $this->sftp_path( $file ) ); if(version_compare(PHP_VERSION,'7.0.0','ge')){ $stat = @ssh2_sftp_stat( $this->sftp_link, $file ); if ( false === $stat ) { return false; } return (true); }else{ return file_exists( $this->sftp_path( $file ) ); } } /** * @access public * * @param string $file * @return bool */ public function is_file($file) { //return is_file( $this->sftp_path( $file ) ); if(version_compare(PHP_VERSION,'7.0.0','ge')){ $stat = @ssh2_sftp_stat( $this->sftp_link, $file ); if( false === $stat ){ return false; } $mode = $stat['mode']; $type = $mode & 0xf000; return ($type == 0x8000); }else{ return is_file( $this->sftp_path( $file ) ); } } /** * @access public * * @param string $path * @return bool */ public function is_dir($path) { //return is_dir( $this->sftp_path( $path ) ); if(version_compare(PHP_VERSION,'7.0.0','ge')){ $stat = @ssh2_sftp_stat( $this->sftp_link, $path ); if ( false === $stat ) { return false; } $mode = $stat['mode']; $type = $mode & 0xf000; return ($type == 0x4000); }else{ return is_dir( $this->sftp_path( $path ) ); } } /** * @access public * * @param string $file * @return bool */ public function is_readable($file) { //return is_readable( $this->sftp_path( $file ) ); if(version_compare(PHP_VERSION,'7.0.0','ge')){ $stat = @ssh2_sftp_stat( $this->sftp_link, $file ); if ( false === $stat ) { return false; } $mode = $stat['mode']; return ($mode & 0x0004); }else{ return is_readable( $this->sftp_path( $file ) ); } } /** * @access public * * @param string $file * @return int */ public function atime($file) { //return fileatime( $this->sftp_path( $file ) ); if(version_compare(PHP_VERSION,'7.0.0','ge')){ $stat = @ssh2_sftp_stat( $this->sftp_link, $file ); if ( false === $stat ) { return false; } return $stat['atime']; }else{ return fileatime( $this->sftp_path( $file ) ); } } /** * @access public * * @param string $file * @return int */ public function mtime($file) { //return filemtime( $this->sftp_path( $file ) ); if(version_compare(PHP_VERSION,'7.0.0','ge')){ $stat = @ssh2_sftp_stat( $this->sftp_link, $file ); if ( false === $stat ) { return false; } return $stat['mtime']; }else{ return filemtime( $this->sftp_path( $file ) ); } } /** * @access public * * @param string $file * @return int */ public function size($file) { //return filesize( $this->sftp_path( $file ) ); if(version_compare(PHP_VERSION,'7.0.0','ge')){ $stat = @ssh2_sftp_stat( $this->sftp_link, $file ); if ( false === $stat ) { return false; } return $stat['size']; }else{ return filesize( $this->sftp_path( $file ) ); } } |