首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >发送HTTP响应后继续执行PHP

发送HTTP响应后继续执行PHP
EN

Stack Overflow用户
提问于 2010-10-01 01:05:07
回答 13查看 42.9K关注 0票数 67

如何让PHP5.2(以apache运行)向客户端发送完整的mod_php响应,然后继续执行操作一分钟?

说来话长:

我有一个PHP脚本,它必须执行几个长的数据库请求并发送电子邮件,这需要45到60秒才能运行。这个脚本是由我无法控制的应用程序调用的。我需要应用程序报告从PHP脚本收到的任何错误消息(主要是无效参数错误)。

应用程序的超时延迟小于45秒(我不知道确切的值),因此每次执行PHP脚本时都会注册为错误。因此,我需要PHP尽快将完整的HTTP响应发送到客户机(理想情况下,只要验证了输入参数),然后运行数据库和电子邮件处理。

我运行的是mod_php,所以pcntl_fork不可用。我可以通过将要处理的数据保存到数据库并从cron运行实际过程来解决这个问题,但我正在寻找一种更短的解决方案。

EN

回答 13

Stack Overflow用户

回答已采纳

发布于 2010-10-01 01:14:29

让处理初始请求的脚本在处理队列中创建一个条目,然后立即返回。然后,创建一个单独的进程(可能通过cron ),该进程定期运行队列中挂起的任何作业。

票数 28
EN

Stack Overflow用户

发布于 2013-01-23 06:38:59

我在我的“特殊脚本”工具箱中有这个片段,但它丢失了(当时云还不常见),所以我在寻找它,并提出了这个问题,惊讶地发现它不见了,我搜索了更多,并回到这里发布它:

<?php
 ob_end_clean();
 header("Connection: close");
 ignore_user_abort(); // optional
 ob_start();
 echo ('Text the user will see');
 $size = ob_get_length();
 header("Content-Length: $size");
 ob_end_flush(); // Strange behaviour, will not work
 flush();            // Unless both are called !
 session_write_close(); // Added a line suggested in the comment
 // Do processing here 
 sleep(30);
 echo('Text user will never see');
?>

实际上,我在一些地方使用它。这是完全有道理的: banklink将返回成功付款的请求,当这种情况发生时,我必须调用许多服务和处理大量数据。这有时需要10秒以上的时间,但banklink有固定的超时时间。因此,我承认banklink,并告诉他出路,当他已经离开时,我做我的事情。

票数 51
EN

Stack Overflow用户

发布于 2010-10-01 02:33:18

您需要的是这种设置

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3833013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档