很长的脚本一直在失败

时间:2013-10-30 05:38:20

标签: php

我有一个脚本,用eBay上的列表更新我的数据库。它从中获取物品的卖家数量总是不同的,有些卖家有超过30,000个物品。我需要能够一次性获取所有这些列表。

我已经为所有数据提取/存储工作了,因为我已经为此创建了客户端应用程序。现在我需要一种自动化的方式来浏览数据库中的每个卖家并提取他们的列表。

我的想法是使用CRON执行PHP脚本,然后填充数据库。

当我尝试执行需要很长时间才能执行的脚本时,我一直收到内部服务器错误页面。

我已经设置了

    ini_set('memory_limit', '2G');
    set_time_limit(0);
    error_reporting(E_ALL);
    ini_set('display_errors', true);
在脚本中

但它仍然在大约45秒的标记处失败。我已经检查了ini_get_all(),但设置仍然存在。

我需要调整其他任何设置,以便脚本可以运行所需的时间吗?

2 个答案:

答案 0 :(得分:0)

请注意set_time_limit功能的警告:

  

当PHP以安全模式运行时,此功能无效。除了关闭安全模式或更改php.ini中的时间限制外,没有其他解决方法。

您是否在安全模式下运行?尝试将其关闭。

这是更大的一个:

  

set_time_limit()函数和配置指令max_execution_time仅影响脚本本身的执行时间。在确定脚本运行的最长时间时,不会包括在执行脚本之外发生的任何活动,例如使用system()的系统调用,流操作,数据库查询等。在测量时间真实的Windows上,情况并非如此。

您是否正在使用外部系统调用向eBay发出请求?或长时间调用数据库?

通过profiling your php script查找特别长的操作,并查找长时间操作(> 45秒)。尝试将这些操作分解为更小的块。

答案 1 :(得分:0)

嗯,事实证明,我忽略了我通过浏览器测试脚本的事实。这意味着Apache正在处理PHP进程,该进程是使用mod_fcgid执行的,该进程的超时时间恰好为45秒。

直接从shell和CRON执行脚本就可以了。