如何使PHP 5.2(以apache mod_php运行)向客户端发送完整的HTTP响应,然后再继续执行操作一分钟?长话说:我有一个PHP脚本,该脚本必须执行一些较长的数据库请求并发送电子邮件,这需要45到60秒才能运行。这个脚本由我无法控制的应用程序调用。我需要该应用程序报告从PHP脚本收到的任何错误消息(主要是无效的参数错误)。该应用程序的超时延迟小于45秒(我不知道确切的值),因此将PHP脚本的每次执行都注册为错误。因此,我需要PHP尽快将完整的HTTP响应发送到客户端(最好是在验证输入参数后立即发送到客户端),然后运行数据库和电子邮件处理。我正在运行mod_php,所以pcntl_fork不可用。我可以通过将要处理的数据保存到数据库并从中运行实际过程来解决此问题cron,但是我正在寻找一个更短的解决方案。
3 回答
红颜莎娜
TA贡献1842条经验 获得超12个赞
我在“特殊脚本”工具箱中有此代码段,但它迷路了(当时云还不常见),所以我一直在搜索并提出这个问题,惊讶地发现它不见了,我进行了更多搜索并得出结论回到这里发布:
<?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');
?>
我实际上在几个地方都用过它。在那完全是有道理的:银行链接正在返回成功付款的请求,当发生这种情况时,我必须调用很多服务并处理很多数据。有时需要10秒钟以上,但是banklink具有固定的超时期限。因此,我感谢该银行联系并向他展示出路,并在他已经离开时做我的事情。
- 3 回答
- 0 关注
- 661 浏览
添加回答
举报
0/150
提交
取消