执行长时间运行的PHP脚本的最佳实践

Mic*_*fer 1 php cron magento symfony laravel

我们需要分发应包含PHP脚本的软件,该脚本将运行几分钟.因此,我正在寻找2017年的最佳实践方法.

  • 它必须由HTTP请求调用.应该没有HTTP请求等待几分钟,因此脚本必须在访问者获得HTTP响应后仍然运行.
  • 它必须定期运行(每晚).它也应该每晚默认运行(如cron作业).注意:由于软件将分发给客户端,我们无法手动添加cronjob(我们无法访问客户端服务器).一切都应该在PHP代码中完成.

(请注意,我自己阅读了现有的博客文章和Stackoverflow问题,但我找不到令人满意的答案)

也许有人知道像Symfony和Laravel这样的框架或像Magento这样的网上商店如何完成这样的任务?我仍然想知道如何在不使用框架或库的情况下在普通PHP中自己完成.

小智 6

存在许多解决方案

  • 使用exec(相当不安全),触发后台工作(在评论中推荐,我可能更喜欢symfony进程,但不安全).
  • 使用cron每隔一段时间触发一次symfony进程,而不是通过http这样更安全.
  • 使用php-fpm,您可以使用fastcgi_finish_request在不停止进程的情况下发送响应
  • 使用队列系统(SQS,RabbitMQ,Kafka等).
  • 在PHP中使用cron管理器
  • 使用守护进程和supervisord之类的东西来确保它连续运行.

最好的解决方案绝对是队列和cron,然后是PHP-FPM,其余部分只是垃圾.

绝对没有办法在某人的服务器上运行而不做某些在某些时候不起作用的事情.

旁注:你说你不想要图书馆知道如何自己做,我添加了图书馆链接,因为阅读它们可能会让你对这项技术有更深入的了解,这些图书馆真的很高质量.