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

Posted

技术标签:

【中文标题】Wordpress 更新操作在 5000 毫秒后超时【英文标题】:Wordpress update operation timed out after 5000 milliseconds 【发布时间】:2014-03-19 06:34:03 【问题描述】:

我在升级 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 或此服务器的配置可能有问题。如果您仍然遇到问题,请尝试支持论坛。

再试一次

【问题讨论】:

手动更新:codex.wordpress.org/Updating_WordPress#Manual_Update 这是在本地主机上吗? @ObmerkKronen 是的,这是在本地主机上 @RRikesh,这更像是一种解决方法而不是解决方案。无论如何,我现在确实这样做了,但是在尝试更新每个单独的插件时也会出现完全相同的问题(“5000 毫秒后超时”)。 嗯.. 我在本地主机上遇到了同样的问题。从 3.7 开始,core 的整个更新机制都发生了变化,看起来有点 bug(在 localhost 上)也许有人需要在 trac 上开一张票 【参考方案1】:

在对 Wordpress 源代码进行深入调查后,我能够将问题追溯到一个名为“更多字段”的插件中的破坏性过滤器。我已经禁用并卸载了该插件,并且升级都可以再次使用。

好奇者的详细信息

我在WP_Http_Curl::request()追踪到这一行

curl_setopt( $handle, CURLOPT_CONNECTTIMEOUT, $timeout );

该函数的默认超时时间是 5,但是 WP_Upgrader::upgrade() 实际上是通过传入 300 秒超时的 download_package 函数调用该函数。

罪魁祸首是“更多字段”插件,其中包含以下过滤器,它破坏了参数数组,因此重置了默认超时:

// 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;

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

【讨论】:

以上是关于Wordpress 更新操作在 5000 毫秒后超时的主要内容,如果未能解决你的问题,请参考以下文章

清除每隔5000毫秒请求一次接口的定时器(需求:每当我手动核销电子码,页面上的显示数据要实时更新到)

超时 - 在 jest.setTimeout 指定的 5000 毫秒超时内未调用异步回调

超时 - 在 jest.setTimeout 指定的 5000 毫秒超时内未调用异步回调

Got Timeout - 在 jest.setTimeout 指定的 5000 毫秒超时内未调用异步回调

JEST:“在 jest.setTimeout 指定的 5000 毫秒超时内未调用异步回调。”,尽管它已经配置

带有 Typescript 错误的玩笑:超时 - 在 jest.setTimeout.Timeout 指定的 5000 毫秒超时内未调用异步回调