Php 如何在所有浏览器上正确显示每次回显时的输出?
我将我的文件移动到一个新服务器,我有一个脚本,可以立即将每个Php 如何在所有浏览器上正确显示每次回显时的输出?,php,browser,output-buffering,Php,Browser,Output Buffering,我将我的文件移动到一个新服务器,我有一个脚本,可以立即将每个echo上的输出显示到浏览器,但这在新服务器上不起作用。以下是我的测试代码: @ini_set('output_buffering', 0); @ini_set('implicit_flush', 1); for ($i = 0; $i < ob_get_level(); $i++) ob_end_flush(); ob_implicit_flush(1); ignore_user_abort(true); set_time
echo
上的输出显示到浏览器,但这在新服务器上不起作用。以下是我的测试代码:
@ini_set('output_buffering', 0); @ini_set('implicit_flush', 1);
for ($i = 0; $i < ob_get_level(); $i++) ob_end_flush();
ob_implicit_flush(1);
ignore_user_abort(true); set_time_limit(0);
$max_wait_time = 30;
$begin_time = microtime(true);
$elapsed_time = 0;
while(!connection_aborted()) {
echo $i++.str_repeat(' ', 1020).'<br/>';
flush(); ob_flush();
usleep(1000000);
if($elapsed_time > $max_wait_time){ break; }
$elapsed_time++;
}
@ini\u集('output\u buffering',0)@ini_集(“隐式_刷新”,1);
对于($i=0;$i ”;
冲水;
美国LEEP(1000000);
如果($eassed_time>$max_wait_time){break;}
$eassed_time++;
}
我试过几件事,都是上面提到的。但打开输出缓冲和刷新对我来说并不起作用。我已经在Chrome和Firefox上进行了测试,它们都只是在最后输出了所有内容
有什么想法吗?浏览器自行决定何时输出内容。因此,如果您没有达到该阈值,他们只会等到达到该阈值,然后向用户显示更多内容。摘自: flush()可能无法重写 web的缓冲方案 它对任何服务器都没有影响 浏览器中的客户端缓冲。 [……] 多台服务器,特别是在Win32上, 仍将缓冲来自 脚本,直到它在 将结果发送给 浏览器 类似Apache的服务器模块 mod_gzip可以自己进行缓冲 这将导致不产生flush() 正在将数据立即发送到 客户
您很有可能更改为不同的web服务器(或web服务器配置),这会在输出整个脚本之前对其输出进行缓冲。您要查找的设置位于PHP.ini中,称为输出缓冲:
; output_buffering
; Default Value: Off
; Development Value: 4096
; Production Value: 4096
手动将其设置为off,然后重新启动Web服务器,使flush()在需要时实际刷新某些内容,而不是在4kb的数据之后:)
请注意,ini_集合不一定总是适用于此。如果您想要完全控制,请在php.ini本身中禁用它,或者作为.htacces php_值标志尝试添加到.htaccess php_value output_buffering Off php_值输出_缓冲关闭
这是真的,但我不认为这是我的情况,因为当我把它放在Media Temple上时,当我使用不同的主机时,它就工作得很好。这一切都开始发生了。所以我不认为这是浏览器的问题。你是说服务器,对吗?浏览器何时显示内容取决于浏览器,但服务器发送的任何内容在发送时都会被浏览器吸收。浏览器吸收内容,但这并不意味着他们会立即显示内容。或者我被告知……这是你可能得到的最好答案。不幸的是,正如
flush()
文档所说,您不能保证[从PHP内部]没有其他缓冲数据的东西。如果可能的话,乱搞Apache设置可能会有所帮助,但如果不是这样的话,我建议您寻找另一种解决方案。