【问题标题】:Call another PHP script and return control to user before the other script completes在另一个脚本完成之前调用另一个 PHP 脚本并将控制权返回给用户
【发布时间】:2011-07-03 11:26:41
【问题描述】:

我实际上是在尝试将此应用于发送电子邮件的脚本。发送电子邮件部分需要几秒钟,这太长了。我想要的是第一个脚本完成它的工作并触发另一个脚本(发送电子邮件),但我希望第一个脚本将控制权返回给用户,而无需等待第二个脚本发送电子邮件。

我考虑过的选项:
Cron 作业: 为此,我必须让 cron 作业每 2 分钟运行一次。不可行!
PHP 脚本激活 cron 作业,完成后会自行停用:好吧,但我该怎么做呢? PHP可以做到吗?

【问题讨论】:

    标签: php email cron


    【解决方案1】:

    你想要使用的是一个叫做 beanstalkd

    的东西

    详情: How can I get a list of all jobs in a beanstalk tube?

    它将允许您将作业排队(做 1,然后 2,然后 3。然后 4)您甚至可以跨服务器分发这些任务(对于 php 作业是的!)。

    【讨论】:

      【解决方案2】:

      您也可以调用 shell 并手动调用 PHP 文件。不需要 cron 也不需要等待。

      http://www.php.net/manual/en/function.exec.php

      来自Notes 部分

      "如果一个程序以此启动 功能,以使其继续 后台运行,输出 程序必须重定向到 文件或其他输出流。失败 这样做会导致 PHP 挂起,直到 程序执行结束。”

      【讨论】:

      • 嗯,刚试了一下,它在返回之前等待另一个脚本。
      • "如果一个程序用这个函数启动,为了让它在后台继续运行,程序的输出必须重定向到一个文件或另一个输出流。如果不这样做会导致 PHP 挂起,直到程序执行结束。” - 在注释部分提到
      • 太好了,谢谢!当我第一次尝试它时,它毫无理由地进入了无限循环。所以我使用 /usr/bin/php-cli 感谢这个问题stackoverflow.com/questions/3615713/…
      • @cwallenpoole 你是对的,该评论应该是答案的一部分。我已经更新了,谢谢。
      【解决方案3】:

      我正在使用 jQuery 和 AJAX 为 PHP 脚本做这样的事情,这需要很长时间。

      【讨论】:

      • 嗯,是的,我理解,但在我的情况下,脚本应该在 POST 到另一个页面并在服务器端进行一些繁重的检查之后运行。所以,就我而言,这不是一种非常安全的方式。
      【解决方案4】:

      其他解决方案:

      • 当需要发送邮件时,您的脚本会在某处(数据库/文件系统)放置一个令牌(令牌可能包含用于生成邮件的数据)
      • 一个守护进程(可以用 php 编写)在后台运行,寻找令牌并“吃掉”它们以发送邮件

      我经常使用这种解决方案...

      【讨论】:

      • 哦,我首先尝试了您的解决方案,但我使用的是共享主机,并且守护进程 PEAR 库希望我使用一些选项重新编译 PHP。但是如果我有自己的服务器,这就是我要使用的方式:) 谢谢
      猜你喜欢
      • 2012-04-23
      • 1970-01-01
      • 2013-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-01
      相关资源
      最近更新 更多