【问题标题】:Curl alternative to Cron Job PHPCron Job PHP 的 Curl 替代品
【发布时间】:2016-02-16 13:06:48
【问题描述】:

我目前正在使用以下 php exec 命令在服务器端加载 url,因为我需要一个不涉及 cron 作业并且也是异步的解决方案,即用户可以在任务已启动,任务仍将执行:

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

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

谢谢,

马特

【问题讨论】:

  • 你说的不可预测是什么意思?
  • 我正在使用该页面在 wordpress 环境中构建数据库。有时脚本没有完成,即只构建了 80% 的数据库。
  • 听起来像是脚本的问题,与它的调用方式无关

标签: php curl cron


【解决方案1】:

如果你使用的是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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-23
    • 1970-01-01
    • 2020-12-18
    • 2014-03-03
    • 1970-01-01
    • 2017-03-25
    • 2011-01-01
    • 1970-01-01
    相关资源
    最近更新 更多