2010-03-13 132 views
4

我正在构建一个蜘蛛,它将遍历各种网站并进行数据挖掘。从一个PHP脚本运行PHP脚本而不会阻塞

由于我需要分别获取每个页面,这可能需要很长时间(可能是100页)。 我已经将set_time_limit设置为每页2分钟,但看起来像apache会在5分钟后终止脚本。

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

apache在整个持续时间内保持活跃状态​​并不重要,我打算使用AJAX触发一次抓取,并在AJAX中稍后检查一次。

我的问题是如何从一个PHP脚本中启动取指操作,而当脚本调用它时终止提取操作。

也许我可以使用系统('script.php &'),但我不知道它会做的伎俩。 有没有其他想法?

+0

一个朋友告诉约配有nohup的,认为这会工作? 这是系统('nohup php -f script.php&') –

回答

5
$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,并且脚本继续执行。即使'parent'脚本在myscript.php之前完成,myscript.php也会完成执行。

+2

不要忘记在$ params上使用http://php.net/manual/en/function.escapeshellarg.php – Andy

+0

谢谢, :) –

+0

NP,欢迎来到SO – Erik

1

如果你不想使用exec你可以使用php内置的函数!

ignore_user_abort(true); 

这将告诉脚本继续即使浏览器和服务器之间的连接断开;)

+0

这应该是选中的回答 – patrick