发送HTTP响应后如何继续PHP脚本

我想知道是否可以立即发送 HTTP 响应并继续执行脚本。

背景:在我向服务器提出的所有请求中,有一个创建了 Excel 文件(使用 PHPSpreadSheet),因为创建此文件可能需要更长的时间,我正在考虑向客户端响应HTTP 202 状态代码,例如:

header("HTTP/1.1 202 Excel file in process");

并在每次状态代码到达时在主 js 文件上编写一个侦听器,以激活时间间隔 ( setInterval()) 并每隔一定秒数询问 Excel 文件是否准备就绪

$(document).ajaxSuccess(function ( event, xhr, settings) {
    if(xhr.status === 202) {
        //Activate the setInterval function to ask the server every 10 seconds whether the file is ready or not
    }
});

(我知道我必须激活/停用间隔)

因此,每当我收到有关 createExcel.php 文件的请愿书时,我想立即回复用户已收到请愿书并开始制作此类 Excel 文件

就像是:

<?php
//Tell user that the petition has being received 
header("HTTP/1.1 202 Excel file in process");
//Kill this process or close this connection but continue executing
//Call createExcel.php


createExcel.php 文件将更新数据库中的某些表,确认文件已创建,间隔请求将每 10 秒查询一次相同的表

这就是我正在尝试做的,我只是想让你们告诉我如何调用另一个文件,而无需等待被调用的文件完成响应用户。

我正在考虑使用exec()但我从未使用过它(我在发布后立即对其进行测试),最重要的是任何经验或提示将不胜感激(例如优化提示等)

我在 Stack Overflow 上看到了这个问题,但答案建议创建一个 cron 服务,这对我来说不是解决方案。

谢谢!

编辑 - -

嘿,万一有人看到这个,我找到了我的问题的两个解决方案:我尝试过的第一个但给权限带来了很多麻烦的是:https : //code-boxx.com/php-background-process/

但是如果你从 cmd 运行它,这个会很好地工作,但是当你认为浏览器运行它时,Apache 禁止你使用执行命令;因此exec()popen()除非您更改文件夹中的权限,否则类似的命令将不起作用,我认为这是一个安全问题,所以我发现了这个非常漂亮的功能fastcgi_finish_request()

编辑 2 - 解决方案
https://qastack.mx/programming/15273570/continue-processing-php-after-sending-http-response
这有效我们刷新缓冲区中的所有内容并关闭连接,然后我们继续执行脚本。

以上是发送HTTP响应后如何继续PHP脚本的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>