我的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!';
我在本地服务器上尝试输出:已接收并正在处理...
但是在我的网站服务器中,输出为: 收到并处理中...结束!
我该如何解决问题。
答案 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。
但是,如果延迟是由于带宽限制引起的,则别无选择,只能等待。