2

我有一个脚本,可以使用来自 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()了,设置仍然存在。

我是否需要调整任何其他设置,以便脚本可以根据需要运行?

4

2 回答 2

0

请注意来自set_time_limit函数的警告:

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

你在安全模式下运行吗?尝试将其关闭。

这是更大的一个:

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

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

通过分析您的 php 脚本来寻找特别长的操作,并寻找长操作(> 45 秒)。尝试将这些操作分成更小的块。

于 2013-10-30T05:45:18.397 回答
0

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

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

于 2013-10-30T21:58:38.530 回答