3

我制作了一个 PHP 脚本,可能需要大约 3 个小时才能完成。我从浏览器运行它,大约 45 分钟后它停止做任何事情。我知道这一点,因为它会轮询某些网址,然后将一些数据保存到数据库中。所以它基本上停止将任何数据放入数据库,这导致我得出它已经停止的结论。它仍然显示在浏览器中,就像它会加载页面一样,但它永无止境。

没有任何错误,所以它可能是某种超时......但它发生的地方是个谜,或者我怎样才能防止它发生。在我的情况下,我不能使用 CLI,我必须使用浏览器客户端来启动脚本。

我试图把

set_time_limit(0);  

但它没有明显的效果。有什么建议可能导致超时并修复它?

4

5 回答 5

5

尝试这个:

set_time_limit(0); 
ignore_user_abort(true);
ini_set('max_execution_time', 0);
于 2013-04-29T12:20:01.243 回答
3

大多数虚拟主机会终止运行一段时间的进程。这旨在作为针对无限循环的故障保护。

询问您的主机,看看是否有任何方法可以为您的这个特定脚本禁用它。在某些情况下,killer 不适用于 Cron 任务或 SSH 运行的进程。但是,这因主机而异。

于 2013-01-18T21:40:30.730 回答
0

可能是浏览器超时,不确定浏览器是否这样做,但我也从来没有一个页面需要这么多时间。

建议:我假设您正在运行一个循环。加载一个页面,然后在对另一个页面的 ajax 调用中运行循环的每次迭代,直到前一个迭代返回时才触发下一次迭代。

于 2013-01-18T21:41:19.537 回答
0

PHP中有一个设置可以在一段时间后终止进程。这对于共享服务器尤其重要(您不希望一个进程减慢整个服务器的速度)。

您需要询问您的主机是否可以对 php.ini 进行修改(通过 .htaccess)。特别是 max_execution_time 设置。

于 2013-01-18T21:42:59.050 回答
0

如果您正在使用会话,那么您需要查看“session.cookie_lifetime”而不是 set_time_limit。如果您使用的是数组,则数组大小也可能会填满。

如果没有有关脚本如何处理任务的更多信息,将很难识别。

于 2013-01-18T21:48:25.187 回答