使用file_get_contents()的PHP脚本运行时间过长

时间:2012-10-19 15:31:51

标签: php file-get-contents

我有一个PHP脚本,通过cron运行,它遍历一个站点列表并使用file_get_contents()针对API URL收集每个站点的数据,然后将这些数据存储在MySQL数据库中。这个脚本运行60个不同的站点,我们看到每个URL pull的最多5MB的序列化PHP数据。

系统在我的本地MAMP服务器上游泳,但是一旦它被放置在远程服务器上,它就会停止可靠的行为。有时它会拉取并存储数据,但存储的记录少于本地服务器。它还完成504网关错误。在另一台服务器上,根本没有完成。我们已经提高了php.ini的所有时间限制,并将我在本地与远程服务器进行了比较,没有看到任何突出的东西。

有没有办法让这些多次重复操作的PHP脚本以更“分段”的方式运行?有没有办法在每个站点运行后“重置计时器”?它需要自动化,但为每个站点设置一个cron(每个站点3个URL,60个站点)听起来像是一个管理的噩梦。

提前致谢。

4 个答案:

答案 0 :(得分:2)

如果运行时间过长,请不要通过Web服务器运行它。你已经有了一个cron作业,所以只需设置cron作业直接运行脚本(例如/usr/bin/php /home/path/to/cronjob.php)。

答案 1 :(得分:1)

问题可能是由于达到PHP或Web服务器的线程限制造成的,也可能是由于服务器中有关每单位时间连接数的规则。

如果您可以分割负载并在不同时刻执行这些cron作业,您将获得更好的结果

答案 2 :(得分:0)

您是否尝试过从远程服务器运行网络诊断程序到您尝试访问的页面(Ping,DNS检查,Wget)?如果响应不是肯定的(HTTP 200代码),则file_get_contents可能需要很长时间才能超时,或者被查询的站点可能需要很长时间才能响应。如果您不想等待失败,可以尝试将stream context设置为适当的超时。

答案 3 :(得分:0)

检查php.ini设置文件中的以下内容,了解服务器之间的一致性;他们中的任何一个都可以解释行为上的差异:

  • 超时
  • 执行时间津贴
  • 内存限制
  • 数据包大小
  • 启用/禁用扩展/模块(例如curl,mysql等)