如何强制设置标头内容长度?

时间:2019-09-11 14:22:03

标签: php

我的PHP文件很大,执行时间很长。 所以我想将Content-Length设置为26。因为不要等到最后。 但是问题是服务器始终将“ Content-Length”设置为实际的“长度”。 如何强制内容长度?


header('Connection: close');
header('Cache-control: no-store');
// set Content-Length for just 26
header('Content-Length: 26');
echo 'Received and Processing...';
flush();ob_flush();


//// some codes...
//// some codes...
//// some codes...

echo 'end!';

我在本地服务器上尝试输出:已接收并正在处理...

但是在我的网站服务器中,输出为: 收到并处理中...结束!

我该如何解决问题。

2 个答案:

答案 0 :(得分:2)

HTTP Content-Length标头不是超时。它告诉HTTP消息的接收者消息主体包含多少字节,以便接收者知道何时停止从连接中读取更多字节。如果Content-Length标头包含错误的值,则事情将会中断。您应该从不不必手动设置标题。

要限制PHP脚本的执行时间,可以选择函数set_time_limit和全局配置变量max_execution_time

答案 1 :(得分:1)

如果我已理解您在问题和后续评论中所说的话,您希望服务器尽快确认该操作,而不是等待处理完成。

修补带有http标头的方法不是正确的方法。假设您对处理期间可能出现的任何新信息不感兴趣,那么可以通过多种方法来实现,但是您需要将处理的执行与导航线程分离。

如果您触发第二个PHP进程(使用第一个PHP进程发出http请求或使用浏览器中的JavaScript)并设置该操作的超时时间,然后以ignore_user_abort(true)开始第二个脚本,则您将实现这一目标。有other solutions

但是,如果延迟是由于带宽限制引起的,则别无选择,只能等待。