卷曲替代Cron Job PHP

时间:2015-11-15 09:50:11

标签: php curl cron

我目前正在使用以下php exec命令在服务器端加载网址,因为我需要一个不涉及cron作业的解决方案,这也是异步的,即用户可以离开表单任务启动后页面仍然执行任务:

exec("nohup curl ".$dbupdateurl." > /dev/null 2>&1 & echo $!");

这在大多数情况下工作正常,但是相当不可预测。是否有更好/更可靠的方法来实现这一目标?

谢谢,

马特

1 个答案:

答案 0 :(得分:0)

如果您使用的是PHP-FPM,则可以使用fastcgi_finish_request

  

此函数将所有响应数据刷新到客户端并完成请求。这允许执行耗时的任务而不会断开与客户端的连接。

这样,您可以使用PHP的本机函数在用户获得响应后进行webrequest。有关如何使用此功能的示例,请参阅example of how to use fastcgi_finish_request()

如果您不使用PHP-FPM ,则可以使用Gearman之类的JobQueue在原始请求之外进行工作。这可能是最可靠的方式,因为它是处理这类工作的专用系统。

另请注意curl can do async http requests。如果问题是您不想等待http响应,这可能比引入JobQueue更容易。

最后但并非最不重要的是,您可以分叉额外的PHP进程来完成工作。请参阅How can I do time consuming task after sending response to clientphp execute a background process