Wordpress更新操作在5000毫秒后超时

dav*_*vur 1 php apache wordpress

我有升级Wordpress的问题,我的谷歌搜索没有找到解决方案.希望你们能帮上忙.

问题

我正在尝试将运行Wordpress 3.7的站点更新为Wordpress 3.8.1,但是在按下"立即更新"按钮时会抛出以下错误.

https://wordpress.org/wordpress-3.8.1-new-bundled.zip下载更新...

下载失败:操作在5001毫秒后超时,收到6333109字节中的736947

安装失败

额外信息

  • 这是在我的本地MAMP开发环境中发生的,因为服务器无权进行实时升级.我希望运行升级,提交代码更改,然后推送到服务器进行测试.
  • 点击"下载3.8.1"时,zip文件下载正常
  • 发生另一个可能相关的问题Plugins > Add New > Popular也会引发错误:

一个意料之外的问题发生了.WordPress.org或此服务器的配置可能有问题.如果您仍然遇到问题,请尝试支持论坛.

再试一次

dav*_*vur 5

在使用Wordpress源代码进行调查之后,我能够将问题跟踪到名为"更多字段"的插件中的破坏性过滤器.我已禁用并卸载了插件,升级再次完成.

那些好奇的细节

我把它跟踪到了这一行 WP_Http_Curl::request()

curl_setopt( $handle, CURLOPT_CONNECTTIMEOUT, $timeout );
Run Code Online (Sandbox Code Playgroud)

该函数的默认超时为5,但WP_Upgrader::upgrade()实际上通过传递300秒超时的download_package函数调用该函数.

这里的罪魁祸首是插件"More Fields",其中包括以下过滤器,它打破了arguments数组,因此重置了默认超时:

// Prevent auto update to this custom plugin
add_filter( 'http_request_args', 'prevent_update_check', 10, 2 );

function prevent_update_check( $r, $url ) {
    if ( 0 === strpos( $url, 'http://api.wordpress.org/plugins/update-check/' ) ) {
        $my_plugin = plugin_basename( __FILE__ );
        $plugins = unserialize( $r['body']['plugins'] );
        unset( $plugins->plugins[$my_plugin] );
        unset( $plugins->active[array_search( $my_plugin, $plugins->active )] );
        $r['body']['plugins'] = serialize( $plugins );
    }
    return $r;
}
Run Code Online (Sandbox Code Playgroud)

不确定它是否故意恶意.它看起来像一个目标过滤器,但在WP_Upgrader中,所有args都丢失了.