为什么PHP flush不能始终正常工作,第1/5次没有正确加载?

Bas*_*nWW 5 php apache

一个大的php脚本使用flush将生成的html的一部分发送到浏览器,同时执行脚本的大部分需要appr.20秒

刷新后执行的脚本部分非常大,从服务器预留(90%cpu)中占用很多.

一旦进入5次页面保持空白(白色),这意味着刷新没有到达发送显示页面正在加载的图像.当程序完成时,页面保持空白(浏览器指示它仍在加载)并且应该将整个页面发送到浏览器.

值得注意的是:当我按下后退按钮时,整个页面将显示(应该在整个脚本执行后应该在浏览器中加载)一秒钟,然后浏览器返回上一页.

所有其他4次页面加载良好.所有5次PHP脚本的输入都是相同的.

我在.htacces文件中有这些设置:

addhandler x-httpd-php5-cgi .php5 
addhandler x-httpd-php5-cgi .php5
addhandler x-httpd-php5-cgi .php5 
Header Set Cache-Control "max-age=0, no-store"
Run Code Online (Sandbox Code Playgroud)

这是将生成的代码刷新到浏览器的语句:

print str_pad('',4096)."\n";
ob_flush();
flush();
Run Code Online (Sandbox Code Playgroud)

什么可能导致这个问题?

Wri*_*ken 2

您只能提示:flush()将其发送到 apache/webserver,它可以缓冲/等待,将其发送到具有任意数量可以缓冲/等待的代理的网络,最终到达您的浏览器,浏览器也可以决定缓冲/等待。如果您不想处理所有这些令人头疼的问题,请选择异步方法。Gearman 让它变得非常简单,但当然不是绝对必要的。