4

我正在构建一个蜘蛛,它将遍历各种站点并对其进行数据挖掘。

由于我需要分别获取每一页,这可能需要很长时间(可能是 100 页)。我已经将 set_time_limit 设置为每页 2 分钟,但无论如何 apache 似乎都会在 5 分钟后终止脚本。

这通常不是问题,因为这将从 cron 或类似的没有此时间限制的东西运行。但是,我也希望管理员能够通过 HTTP 接口手动启动获取。

apache 在整个持续时间内保持活动状态并不重要,我将使用 AJAX 触发一次获取并偶尔使用 AJAX 进行检查。

我的问题是如何从 PHP 脚本中开始提取,而不会在调用它的脚本死亡时终止提取。

也许我可以使用 system('script.php &') 但我不确定它是否能解决问题。还有其他想法吗?

4

2 回答 2

6
    $cmd = "php myscript.php $params > /dev/null 2>/dev/null &";

    # when we call this particular command, the rest of the script 
    # will keep executing, not waiting for a response
    shell_exec($cmd);

这样做的目的是将所有 STDOUT 和 STDERR 发送到 /dev/null,并且您的脚本会继续执行。即使“父”脚本在 myscript.php 之前完成,myscript.php 也会完成执行。

于 2010-03-13T21:16:05.683 回答
1

如果您不想使用 exec ,可以使用 php 内置函数!

ignore_user_abort(true);

即使浏览器和服务器之间的连接断开,这也会告诉脚本恢复;)

于 2010-11-15T07:54:25.940 回答