为了账号安全,请及时绑定邮箱和手机立即绑定

发送HTTP响应后继续执行PHP

发送HTTP响应后继续执行PHP

PHP
青春有我 2019-09-21 14:26:49
如何使PHP 5.2(以apache mod_php运行)向客户端发送完整的HTTP响应,然后再继续执行操作一分钟?长话说:我有一个PHP脚本,该脚本必须执行一些较长的数据库请求并发送电子邮件,这需要45到60秒才能运行。这个脚本由我无法控制的应用程序调用。我需要该应用程序报告从PHP脚本收到的任何错误消息(主要是无效的参数错误)。该应用程序的超时延迟小于45秒(我不知道确切的值),因此将PHP脚本的每次执行都注册为错误。因此,我需要PHP尽快将完整的HTTP响应发送到客户端(最好是在验证输入参数后立即发送到客户端),然后运行数据库和电子邮件处理。我正在运行mod_php,所以pcntl_fork不可用。我可以通过将要处理的数据保存到数据库并从中运行实际过程来解决此问题cron,但是我正在寻找一个更短的解决方案。
查看完整描述

3 回答

?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

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


查看完整回答
反对 回复 2019-09-21
?
红颜莎娜

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具有固定的超时期限。因此,我感谢该银行联系并向他展示出路,并在他已经离开时做我的事情。


查看完整回答
反对 回复 2019-09-21
  • 3 回答
  • 0 关注
  • 661 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信