我有一个PHP脚本,检查(千)网站上的更新。 有时候(随着网站数量的增加,频率越来越高),我在其中一个站点的更新上遇到了执行超时,而整个脚本就会消失。
我能想到的最好的想法是分叉每个更新,所以如果它死了,整体更新只是继续。 从我看来,似乎PHP线程是不能依赖的,特别是在Windows平台(我不得不努力)。
我想过使用curl作为分叉机制,但是对于服务器(在时间和处理能力方面)是不是会花费更多的代价呢?
我很乐意听到关于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。 这意味着pcntl
是pcntl
的。
我担心发送数以千计的curl请求到我自己的服务器可能会占用网站上的用户,但当时我错了。
然而,我确实需要在启动所有curl调用的脚本中添加一个set_time_limit(0)
,否则就会超时。