什么是最好的方式来在Win上分叉/线程的PHP?

我有一个PHP脚本,检查(千)网站上的更新。 有时候(随着网站数量的增加,频率越来越高),我在其中一个站点的更新上遇到了执行超时,而整个脚本就会消失。

我能想到的最好的想法是分叉每个更新,所以如果它死了,整体更新只是继续。 从我看来,似乎PHP线程是不能依赖的,特别是在Windows平台(我不得不努力)。

我想过使用curl作为分叉机制,但是对于服务器(在时间和处理能力方面)是不是会花费更多的代价呢?

我很乐意听到关于PHP分叉/线程的一些想法和经验…

谢谢,奥默。

Solutions Collecting From Web of "什么是最好的方式来在Win上分叉/线程的PHP?"

如果您打算使用cURL来查看multi *系列方法,该方法可以简化cURL并与一组网站进行交互。 这就是说,你也可以设置你的最大执行时间(通过ini_set)到一些任意高的数字和/或保持你自己的看门狗计数器,以便你永远不要让它太高。

但是,最终会遇到问题,并且缺乏PHP中的完整线程支持。 所以最好的办法是看其他的选择,例如提供本地线程支持的其他语言/平台。

我设法使用pcntl扩展在php中获得某种形式的线程。它不是最好的解决方案,但它做了伎俩。

http://www.php.net/manual/en/ref.pcntl.php

也尝试下面的链接,给了我一个想法如何去执行。

http://www.van-steenbeek.net/?q=php_pcntl_fork

http://www.hudzilla.org/phpbook/read.php/16_1_3

http://www.electrictoolbox.com/article/php/process-forking/

我希望这可以帮助,但PHP不是很好的线程虽然。

您可以将ini指令max_execution_time设置为0.这应该删除最大执行时间,并允许脚本运行而不会产生此错误。 这个值必须在你的php.ini文件中设置 – 但是使用ini_set不起作用。

 set_time_limit(0); 

set_time_limit文档

那么,最后我去卷曲,它运作得很好。

我需要一个跨平台的解决方案,因为我在Mac上开发,而在这种情况下,生产服务器是Windows。 这意味着pcntlpcntl的。

我担心发送数以千计的curl请求到我自己的服务器可能会占用网站上的用户,但当时我错了。

然而,我确实需要在启动所有curl调用的脚本中添加一个set_time_limit(0) ,否则就会超时。