我们需要分发应包含PHP脚本的软件,该脚本将运行几分钟。因此,我正在寻找2017年的最佳实践方法。
(请注意,我自己阅读了现有的博客文章和Stackoverflow问题,但我找不到令人满意的答案)
也许有人知道像Symfony和Laravel这样的框架或像Magento这样的网上商店如何完成这样的任务?我仍然想知道如何在不使用框架或库的情况下在普通PHP中自己完成。
存在许多解决方案
最好的解决方案绝对是队列和cron,然后是PHP-FPM,其余部分只是垃圾。
绝对没有办法在某人的服务器上运行而不做某些在某些时候不起作用的事情。
旁注:你说你不想要图书馆知道如何自己做,我添加了图书馆链接,因为阅读它们可能会让你对这项技术有更深入的了解,这些图书馆真的很高质量。
Magento只运行cronjobs,如果你为Magento设置一个普通的cronjob。它有一个cron.sh,每分钟运行一次,在Magento的队列中执行作业。
任何通过http执行长时间运行任务的解决方案都涉及Web服务器配置。
最后,我认为有两种方法可以通过HTTP请求在PHP中启动长时间运行的进程(不会让用户等待很长时间):
fastcgi_finish_request();
longrunningtask();
exec('php longrunningtask.php >/dev/null 2>/dev/null &');
shell_exec('php longrunningtask.php >/dev/null 2>/dev/null &');
system('php longrunningtask.php >/dev/null 2>/dev/null &');
passthru('php longrunningtask.php >/dev/null 2>/dev/null &');
或者像proc_open()
一样使用symfony/process
。笔记:
symfony/process
:在你可以阅读的文档中,你可以使用FPM和fastcgi_finish_request()
进行长时间运行的任务。