2013-01-09 125 views
1

我有一个php程序,它执行广泛的curl请求来抓取网页。这可能需要多达100万次。我需要完全停止脚本运行。即使我在浏览器中停止了它,它仍在处理请求。我怎样才能永久阻止它?已停止运行的php停止脚本进程

+0

对于这类情况,应该总是有一个kill开关。 Prash

+0

现在我明白了我所做的一切是不好的做法:|谢谢你的答案! –

回答

5

你只是在杀死请求,你需要停止apache来暂停它。在将来重新设计它,以便进程查找kill开关(如文件的存在)并在找到它时停止处理。听起来你正在将长时间运行的进程干扰到php脚本中,为什么不直接将它作为正常的系统进程运行?

+0

所以这可能和检查'maintenance.flag'一样简单? –

+0

当然,几乎任何东西。例如,/ tmp中的文件。 – mcassano

+0

太好了,我猜想一切都是一个学习过程。我将在每一个更大的项目中为此计划。 –

2

重新启动Apache。如果您使用XAMP,请停止并从控制面板启动它。

如果不是,则在Windows上转到任务管理器并结束apache.exe进程。然后再次启动它。

4

假设您正在运行典型的灯管堆栈,必要时将SSH放入您的机器中,然后重新启动Apache。

如果您真的要用PHP执行长时间运行的任务,我必须建议您考虑使用cron来运行它们或实现某种类型的任务队列。从浏览器请求中引发这些事情通常是一个非常糟糕的主意。

1

为什么地狱是每个人都假设你在运行Apache?重新启动您的Web服务器,它应该是花花公子。当你准备停止^

while(!file_exists('stop.txt'))

接下来,只要该文件^或者切断之前有迭代数量有限的:在未来,你可以像一个杀死开关(例如)。

+2

我个人并不认为Apache的假设是不合理的。 LAMP堆栈非常常见,许多其他服务器通过它们自己的超时处理这样的挂起脚本。我想我们都在早期的职业生涯中因为PHP的一些错误而与一个悬挂的Apache线程进行了斗争,所以这是一个快速识别:) – DeaconDesperado