我目前正在尝试根据我可以使用的内容生成一个关于demenad的epub。 不幸的是,当epub有很多内容时,http请求需要一段时间(在某些情况下为10分钟) - 这是不理想的
我想遵循类似于Safari的方法 - 生成epub并在文档可用时通过电子邮件发送给用户
我的问题是 - 在PHP中运行后台任务/线程的最佳方法是什么,可能需要很长时间才能完成
答案 0 :(得分:16)
你要小心长时间运行的PHP进程,因为一个PHP的内存效率不高(例如,PHP中只有100个整数的数组可以消耗多达15KB的内存)。这通常适用于99%的用例,因为大多数人只是在网站上使用PHP而这些进程运行的时间只有几分之一,所以因为速度而牺牲了内存。但是,对于长时间运行的过程(特别是如果你有很多这样的过程),这可能不是你最好的解决方案。
您还需要非常小心地在PHP中调用exec / shell_exec函数,因为它们在内部实现为流(即它们可能导致父进程中的阻塞,因为它通常必须等待流返回数据)。 / p>
背景任务的一个选项是使用fork。但是,我强烈建议您使用适当的职位经理,例如gearman(请参阅php extensions),或排队,如amqp或zmq,以便更干净地处理这些任务。哪一个更适合您的用例,我会让您决定。
答案 1 :(得分:1)
你可以运行命令
$command = 'nohup >/dev/null 2>&1 /your/background/script.php &'