PHP不是一个永久运行的进程:它仅在需要时运行。据我所知,Wordpress只能在有人加载网页时进行自我更新。但是更新过程不是瞬时的,因此访问该网站的用户肯定会加载非常缓慢的页面。
他们是否使用其他技巧来进行自动更新?我搜索了整个地方,但没有找到任何解释。
#1 楼
PHP并不是一个永久运行的进程:它只能在请求时运行。但是更新过程不是即时的,因此
当然,访问该网站的用户的页面加载速度会非常慢。我已经在整个地方搜索了,但没有找到任何解释。
您在这里寻找的系统称为“ WP Cron”。这是WordPress中的后台处理系统,允许事件在正常处理之外发生。他们仍然需要触发器来启动它们,但是由于后台进程,它们不会干扰页面加载。
所以,是的,必须有人加载您的页面。在default-filters.php文件中,您将找到以下代码行:
add_action( 'init', 'wp_cron' );
因此,在每次加载页面时,都会运行wp_cron函数。此功能在wp-includes / cron.php中已经结束,它的作用是检查数据库中的预定事件。如果有任何进程需要在后台运行,则调用函数spawn_cron。在wp-cron.php的URL上建立回自身的连接。通过发出此额外的HTTP请求,它将启动另一个PHP进程来完成所有实际工作。它在此处发出的请求是非阻塞的,超时为0.01秒。因此,它实际上在这里没有任何结果。请求的目的仅仅是在后台启动一个新进程。完成此操作后,它只会返回,因此查看用户永远不会有任何延迟。
wp-cron.php过程是实际工作,更新和其他所有过程。 WordPress中的许多流程都由cron系统处理。可以计划排定的发布,处理ping,更新检查,以及在正常流程之外发生的任何事情,然后根据需要运行。
但是,确实必须对网站进行正常的攻击才能启动该过程。而且,WordPress.org不会直接与您的网站联系以启动事情,您的网站必须收到某种形式的流量才能启动。任何形式的流量都可以。
#2 楼
实际上,自动更新是从wp.org
推送的。更新过程仍在您的网站上运行,但通过wp-cron
在后台运行。当新的次要更新发布时,WordPress的家伙开始推出该更新。在您的站点检查了
wp.org
的更新之后,才开始实际的更新过程,理论上可以进行更新,并且随机选择要更新的站点。@otto指出我的错误措辞:))
当每个站点使用
wp.org
检查新版本时(通常每天使用wp-cron
两次),部署服务器会知道有多少个站点需要更新。然后开始缓慢地开始部署-128个站点中的1个会自动更新。这正在受到监视,并且如果成功指示推出没有问题,则更多站点将获得自动更新(通常,下一步将是64个站点中的1个,并以这种方式继续增加),直到所有自动更新都交付为止。
这使开发人员可以在出现任何问题时停止推出,但是从
3.8
到3.8.1
的最新更新的成功率为100%。1 out of 128
实际上是随机的。好吧,不是真的,但是,如果您想知道,它的工作原理如下:仅使用此哈希的前三个字符并将其转换为MD5
,将导致4096种可能性。此更新开始于计算出的数字介于0到31之间的网站(4096/32 = 128)。好吧,我想毕竟是随机的;)
在我的网站上案例,因为我运行了很多WordPress网站,所以更新花了1天的时间-看到所有页面都更新的时候真是太有趣了。 br /> btw,这是make.wordpress.org上的一篇文章,描述了发生的过程。
评论
如果它是“从wp.org向您的网站发出的请求开始的”,那么它的安全性如何?没人可以向您的网站发送请求吗?
–心怀不满的山羊
2014年1月27日上午11:33
实际上,我不知道该如何处理。但我确定会有安全检查,例如随机数和/或请求来自何处。
– fischi
2014年1月27日,12:02
@fischi您是否获得了wp.org发起更新的信息?如果wp.org告知更新存在,则wp.org启动更新或wordpress网站检查更新,然后自行启动更新之间存在很大的区别。
–卡夫纳
2014年8月11日12:11
这个答案实际上是不正确的。 WordPress.org不会启动更新过程到您的站点。您的网站确实确实需要某种流量来启动它,但是WordPress.org不会直接对您的网站执行ping操作。
–奥托
2014年11月21日在9:58
可以,但是“由wp.org向您的网站发出的请求开始”是不正确的。您的站点发出更新请求,然后响应告诉您是否有更新。并非相反,您的站点必须启动该过程。
–奥托
2014年11月21日,12:36
#3 楼
概括地说,当用户访问站点时,WordPress会检查计时器是否到期,如果检测到到期,则会向服务器发送另一个请求,以“运行”与到期事件关联的操作。这就是为什么用户不会感到页面加载有任何明显的延迟的原因,因为服务器是在单独的进程中运行实际操作(在这种情况下为升级)。非常精准。您网站的流量越多,其准确性就越高。希望获得更好的性能和更准确的计时的人可以阻止内部cron“进程” wordpress拥有,并使用OS cron进程来触发计时器检查。
评论
准确地说,它仅在发布新的次要或安全更新时才更新,例如从3.8升级到3.8.1,但是在发布3.9(作为主要版本更新)时,则必须手动进行。