【发布时间】:2011-04-19 11:32:54
【问题描述】:
如何让 PHP 5.2(以 apache mod_php 运行)向客户端发送完整的 HTTP 响应,然后再继续执行操作一分钟?
长篇大论:
我有一个 PHP 脚本,它必须执行几个长的数据库请求并发送电子邮件,这需要 45 到 60 秒才能运行。此脚本由我无法控制的应用程序调用。我需要应用程序报告从 PHP 脚本收到的任何错误消息(主要是无效参数错误)。
应用程序的超时延迟小于 45 秒(我不知道确切的值),因此将 PHP 脚本的每次执行都注册为错误。因此,我需要 PHP 尽可能快地向客户端发送完整的 HTTP 响应(理想情况下,输入参数一经验证),然后运行数据库和电子邮件处理。
我正在运行 mod_php,所以pcntl_fork 不可用。我可以通过将要处理的数据保存到数据库并从cron 运行实际过程来解决这个问题,但我正在寻找更短的解决方案。
【问题讨论】:
-
抱歉,这看起来完全是对 PHP 语言的滥用。
-
滥用 PHP 语言不如滥用网络服务器进程严重。如果不再涉及 HTTP / web,则没有网络服务器应该忙于它。
-
系统滥用与否,有时我们必须做我们不喜欢的事情,因为我们无法控制的要求。不会使问题无效,只会使情况变得不幸。
-
我根本看不出这是滥用。如果是这样,应该有人告诉亚马逊关闭 amazon.com,因为打包和运送订单所涉及的大部分工作都是在购买网络请求完成后进行的。要么这样,要么对 amazon.com 购买请求设置两周的超时时间,并且仅在订单交付给客户后才将响应发送到浏览器。
-
让我们尽量保留个人意见。请回答问题或去其他地方。