为什么PHP刷新并不总是有效,页面1/5次未正确加载


Why is PHP flush not always working, page 1/5 times not loaded properly?

一个大型 php 脚本使用刷新将生成的 html 的一部分发送到浏览器,同时它正在执行脚本的大部分,这需要大约 20 秒。

刷新后执行的脚本部分非常大,并且占用了服务器保留(90% CPU(的大量资源。

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

出色:当我按下后退按钮时,整个页面将显示(应该在执行整个脚本后加载到浏览器中(一秒钟,然后浏览器返回到上一页。

所有其他 4 次页面加载良好。php 脚本的输入在所有 5 次中都是相同的。

我的 .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"

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

print str_pad('',4096)."'n";
ob_flush();
flush();

可能导致此问题的原因是什么?

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

print str_pad('',4096)."'n";

您是否注意到您正在重复一个空字符串?也许你的意思是

print str_pad(' ',4096)."'n";

该语句的目的是因为某些 Web 浏览器在收到一定数量的字节或响应完成(以先到者为准(之前不会呈现页面。