升级到 PHP8.2 版后,WordPress程序不太友好,除了主题插件的不兼容问题外,还遇到后台无法在线安装更新插件或主题的问题,提示更新失败。
注意这个更新失败提示,不是上面的“连接丢失或服务器忙,请稍后再试”,而是下面的致命错误,文件都正常下载到临时目录了。
更新失败:此站点遇到了致命错误,请查看您站点管理员电子邮箱中收到的邮件来获得指引。了解有关对WordPress进行故障排除的更多信息。
PHP Fatal error: Uncaught Error: Call to undefined function chmod() in \wp-admin\includes\class-wp-filesystem-direct.php:173
PHP Warning: chmod() has been disabled for security reasons in \wp-admin\includes\class-wp-filesystem-direct.php on line 173
这个173行代码如下:
if ( ! $recursive || ! $this->is_dir( $file ) ) {
return chmod( $file, $mode );
}
原因是在你的 PHP 环境中没有启用 chmod()
函数,或者该函数被禁用了。要解决这个问题,在 PHP 配置文件(php.ini)中,确保 chmod
函数没有被禁用。你可以在 php.ini 文件中搜索 disable_functions
配置项,确保其中没有 chmod。
disable_functions=exec,system,passthru,popen,pclose,shell_exec,proc_open,dl,chmod,escapeshellarg,escapeshellcmd,sh2_exec,proc_terminate,proc_close,putenv,pcntl_setpriority,pcntl_getpriority,pcntl_signal,pcntl_fork,apache_setenv,imap_open,syslog,openlog,pcntl_exec
把其中的(chmod,)删掉即可解决。
chmod 函数用于修改文件权限,WordPress在更新和安装插件或主题时需要调整文件权限。但通常情况下,对于 Windows 系统,不需要使用 chmod
函数来调整文件权限,这函数主要用于Unix/Linux系统。。
把环境切换回 PHP7.4 版本,则是正常运行,不需要启用 chmod
这个函数,可以正常更新插件或主题,没有任何故障。而在 PHP8 任何版本(8.0、8.1、8.2、8.3等)都有这个问题。
可能原因是 PHP8 对文件权限和安全机制进行了优化,调整了权限管理的机制,在执行被禁用函数方面表现得更为严格和安全。而 WordPress 代码没有相应进行调整,所以在 PHP 8 环境下禁用 chmod
就会无法正常运行。
2024年8月底 PHP 更新到 8.3 版本后,再次遇到这种情况。之前标题是:解决WordPress在PHP8禁用chmod更新失败的问题。
只能在 PHP8 环境下开启 chmod 函数来解决这个不兼容问题。