【问题标题】:PHP : How can I ensure my script is long running?PHP:如何确保我的脚本长时间运行?
【发布时间】:2012-02-15 17:38:23
【问题描述】:

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

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

但理想情况下,我希望能够将其设置为启动并能够稍后查看网页并查看它是否仍在运行或完成。有没有一种方法可以启动一个进程,然后返回查看同一个进程?

当我问这样的问题时,我不太确定正确的术语,所以我希望我已经说清楚了:)

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

【问题讨论】:

  • 那么你要做的是监控任务的进度吗?
  • 是的 - 我相信是这样,并确保即使浏览器关闭,进程仍然在运行。
  • 您可以使用 ajax 来执行此线程中描述的操作:stackoverflow.com/questions/7049303/…

标签: php timeout


【解决方案1】:

设置一个 cron 作业来运行您的脚本并将其状态记录到某处的文本日志中。那么你所要做的就是检查你的日志。

【讨论】:

  • 我是使用 exec() 还是 system() 来设置服务器进程?这是你的意思吗?
  • 您使用的是共享主机吗?如果是这样,您可以在 cPanel 中设置 cron 作业。其他共享主机也有类似的处理方式。 upstartblogger.com/how-to-create-a-cron-job-in-cpanel
  • 每次运行的脚本都是动态的,我希望能够直接从 PHP 中完成,而不是通过面板设置 cron 作业。不,我使用的是专用服务器而不是共享主机。
  • 它仍然是可能的,即使它是动态的。也许这会更有帮助? net.tutsplus.com/tutorials/php/managing-cron-jobs-with-php-2
【解决方案2】:

在一个普通的 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 页面。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-26
    • 1970-01-01
    • 1970-01-01
    • 2019-02-12
    • 1970-01-01
    • 1970-01-01
    • 2016-11-14
    • 1970-01-01
    相关资源
    最近更新 更多