我正在开发一个简单的应用程序,它将允许我将电子邮件从一个IMAP服务器迁移到另一个。
尽管脚本可以工作,但可能有些IMAP邮箱非常大,而且脚本运行时间很长。我知道我可以使用set_time_limit(0)
将脚本的时间限制设置为永远不会结束
然而,理想情况下,我希望能够将其设置为启动,并能够稍后查看网页,看看它是否仍在运行或完成。有没有一种方法可以启动一个流程,然后再回来查看相同的流程?
当我问这样的问题时,我真的不确定正确的术语,所以我希望我已经明确了自己:)
编辑:我刚刚看到函数ignore_user_abort()
,但我不确定这将如何让我回到同一页,查看进程是否仍在运行、是否因错误而停止,或者是否已完成。
设置一个cron作业来运行脚本,并将其状态记录到某个文本日志中。然后你所要做的就是检查你的日志。
在正常的HTTP请求中,PHP作为其他程序的子进程运行。通常是Apache,但这完全取决于你的web服务器是什么。问题是,即使有PHP中的选项,web服务器也总是有可能因为各种不同的原因结束PHP进程。
拥有长时间运行的PHP脚本的最佳解决方案是通过命令行界面(CLI)运行脚本http://php.net/manual/en/features.commandline.php
在那里,它可以想跑多久就跑多久。我仍然会使用set_time_limit(0)
,但请查看上面的链接以了解详细信息。
此外,如果您不能访问服务器上的命令行,通常您可以访问某种任务调度程序(Linux中的CRON)。这些通常通过像在命令行上一样执行命令来工作,因此您可以根据需要设置一个任务来运行PHP脚本。
至于状态更新。您可以让迁移代码将状态写入数据库或文本文件。然后创建第二个显示状态更新的普通PHP页面。