PHP:如何确保我的脚本长时间运行?

时间:2012-02-15 17:38:24

标签: php timeout

我正在开发一个简单的应用程序,它允许我将电子邮件从一个IMAP服务器迁移到另一个IMAP服务器。

尽管脚本有效 - 但某些IMAP邮箱可能非常大,并且脚本运行了很长时间。我知道我可以将脚本的时间限制设置为永远不会使用:set_time_limit(0)

但理想情况下,我希望能够将其设置为启动并稍后查看该网页,看看它是否仍在运行或已完成。有没有办法启动流程然后回来查看相同的流程?

在问这样的问题时,我不确定正确的术语,所以我希望我已经明白了:)

编辑:我刚看到函数ignore_user_abort(),但我不确定这将如何让我回到同一页面,看看该进程是否仍在运行,由于错误而停止,或者是否已完成。

2 个答案:

答案 0 :(得分:4)

设置cron作业以运行脚本并将其状态记录到某处的文本日志中。然后你要做的就是检查你的日志。

答案 1 :(得分:1)

在正常的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页面,显示状态更新。