【问题标题】:PHP request "in background"PHP请求“在后台”
【发布时间】:2011-07-21 19:43:25
【问题描述】:

有没有一种方法可以在用户不必等待响应的情况下发出 PHP 请求?某种“后台php请求”?

例如,如果应用程序需要发送 100 封电子邮件,因为用户提交了某些内容,我不想为该用户显示“正在发送...请稍候”,但我希望其他脚本独立完成这项工作来自该用户...

【问题讨论】:

标签: php background request


【解决方案1】:

选项:

  1. 插入数据库(或文件)并使用 cron 轮询它(最简单,因为您可能已经使用了数据库)。
  2. 使用 RabbitMQØMQ 之类的东西(我最喜欢的
  3. 使用fork/exec 生成一个单独的进程来执行此操作(不建议这样做)。
  4. 正如其他人所建议的那样 - 通过使用 Ajax 请求来伪造它。可行 - 但我觉得它很难看。

【讨论】:

    【解决方案2】:

    您也许可以通过这种方式在 Ajax 中将请求发送到 UI 不会冻结并且任务将在服务器上执行?

    【讨论】:

    • 如果用户同时离开页面怎么办?脚本会被执行吗?
    • @domagoj412 - 是的。如果请求到达 Web 服务器,它将起作用。用户不会得到响应。
    • 就像 Emil 所说,如果请求发送到服务器,无论客户端做什么,服务器都不会停止,但客户端不会收到来自服务器的任何文本通知。应该可以完成这项工作,并且不需要您配置其他队列消息传递系统。
    【解决方案3】:

    您可以通过 ajax 发送请求,然后在成功后将用户重定向到其他地方。服务器脚本仍将处理,但不会向用户提供确认。

    【讨论】:

      【解决方案4】:
      exec('php script.php > /dev/null & echo $!', $o);
      

      您可能还想使用php-cli 而不是php。 上面的命令在 $o[0] 中返回后台脚本的进程 ID,因此如果你想向用户显示它的进度,你可以设置一些东西来使用 ajax 或其他东西来轮询它。

      【讨论】:

        【解决方案5】:

        创建一个 php 例程来完成发送电子邮件的实际工作,并使用技术 described here 通过 http GET 调用它。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-08-05
          • 2020-04-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多