全新安装时的PHP警告(连接超时)

时间:2012-07-05 作者:ohaal

我在访问我的最新WordPress 3.4.1安装(挪威语)时收到此PHP警告。

Warning: fopen(URL_TO_MY_WORDPRESS_PAGE/wp-cron.php?doing_wp_cron=1341476616.7605190277099609375000): failed to open stream: Connection timed out in PATH_TO_MY_WP_FILES/wp-includes/class-http.php on line 923
<这当然是WP_DEBUG 标志设置为true, 因为它在开发服务器上运行

enter image description here

这是间歇性发生的,所以这似乎是一个问题wp-cron.

这可能是WordPress中的错误还是我的服务器上的错误?Should I worry?

该服务器是一个全新的Ubuntu服务器12.04虚拟机,带有LAMP堆栈。

Google search shows I\'m not the only one experiencing this. (请参阅列出的页面的缓冲/索引版本以查看实际错误。)

EDIT: I\'m also getting this same PHP Warning on the front page. Could it be related to the fact that the webserver is being NATed to? Currently I\'ve set up the firewall to point port 19235 to 80 on the development server.

1 个回复
最合适的回答,由SO网友:ohaal 整理而成

答案显然是YES, I should worry. 经过一些研究,我发现这个警告似乎与WordPress所在服务器上的错误配置有关(即,我的服务器有问题,而不是WordPress)。

常见错误配置:

服务器没有DNS,所以它无法识别“example.com”是谁,即使它本身就是我的问题实际上是由我的防火墙(pfSense)引起的,which has "Disable NAT reflection" by default (列为常见原因#2)。

在服务器本身上,我尝试使用telnet联系自己,结果如下:

$ telnet external.server.hostname.com 19235
Trying XXX.XXX.XXX.XXX...
telnet: Unable to connect to remote host: Connection timed out
要解决这个问题,我必须取消选中Disable NAT reflection 在我的防火墙上。在我的例子中,这是在系统->高级->防火墙/NAT下pfSense的web界面中
来源:http://forum.pfsense.org/index.php?topic=3473.0

enter image description here

现在,我可以通过防火墙与自己(在服务器本身上)进行连接:

$ telnet external.server.hostname.com 19235
Trying XXX.XXX.XXX.XXX...
Connected to external.server.hostname.com.
Escape character is \'^]\'.
我不再收到关于wp cron的PHP警告。

我读了之后就明白了this detailed answer regarding wp_cron, explaining how it works.

Short answer: 将其添加到wp配置中的定义中。php文件:define(\'ALTERNATE\\u WP\\u CRON\',true);

Really long answer, for masochists: 预定的帖子现在没有,也从来没有被“破坏”。WordPress的开发人员无法修复它,因为没有什么需要修复的。

问题在于您的服务器由于某种原因无法正确执行wp cron进程。这个过程是WordPress的计时机制,它处理从预定的帖子到发送pingback到XMLRPC ping等所有事情。

它的工作方式非常简单。每当加载WordPress页面时,WordPress会在内部检查是否需要启动wp cron(通过比较当前时间和上次运行wp cron的时间)。如果它确实需要运行wp-cron,那么它会尝试通过调用wp-cron建立回自身的HTTP连接。php文件。

这种与自身的联系是有原因的。wp-cron有很多工作要做,这项工作需要时间。延迟用户看到他的网页,而它做了一大堆事情,这是一个坏主意,因此通过将该连接恢复到自身,它可以在单独的进程中运行wp cron程序。由于WordPress本身并不关心wp cron的结果,因此它只需等待一秒钟,然后返回到为用户呈现网页。与此同时,wp-cron已经启动,它会一直工作到完成或执行时间用完为止。

HTTP连接是一些配置不当的系统出现故障的地方。基本上,WordPress就像一个web浏览器。如果您的站点http://example.com/blog, 然后WP将呼叫http://example.com/blog/wp-cron.php 启动流程。然而,由于某些原因,一些服务器根本无法做到这一点。可能的原因包括:

服务器没有DNS,所以它无法识别“example.com”是谁,即使它本身就是

但是,如果您有这种情况,则有一种解决方法。将其添加到wp配置中的to定义中。php文件:

define(\'ALTERNATE_WP_CRON\', true);
此替代方法使用重定向方法,这使得用户浏览器在cron需要运行时获得重定向,以便他们在cron继续在刚断开的连接中运行时立即返回站点。这种方法有时有点不确定,这就是为什么它不是默认的。

来源:http://wordpress.org/support/topic/scheduled-posts-still-not-working-in-282#post-1175405

正如这篇精彩而详细的文章所述,如果您无法控制服务器配置或环境(如果适用),那么解决方法是

define(\'ALTERNATE_WP_CRON\', true);
在wp配置中。php文件。

结束

相关推荐

WP-cron.php-如何删除WP的Cron瞬变?

我有一个Wordpress网络,我的任务是禁用WP Cron并将其替换为Apache Cron。我已经设置了一个PHP脚本,当Apache Cron调用该脚本时,它将在网络下的所有站点中循环,并向该站点的wp Cron发出请求。php页面,从而执行其cron。我想使用Wordpress的瞬态特性来限制我的PHP脚本,因为Wordpress限制了自己的cron。然而,当我深入研究代码时,我看到doing\\u cron瞬态已设置(在cron.php#217中),但从未取消设置。瞬态是否一直未设置,或者Wor