我将文件移动到新服务器,我有一个脚本,可以立即显示每个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++;
}
我尝试了一些已成为上述内容的东西。但转向输出缓冲和冲洗并不适合我。我在Chrome和Firefox上测试过它们,它们都只是在最后输出所有内容。
有什么想法吗?
答案 0 :(得分:13)
flush()可能无法覆盖 你网络的缓冲方案 服务器,它对任何都没有影响 浏览器中的客户端缓冲。 [...]
多个服务器,特别是在Win32上, 仍将缓冲你的输出 脚本,直到它之前终止 将结果传送给 浏览器。
Apache的服务器模块 mod_gzip可以自己缓冲 这将导致flush()不会导致 数据被立即发送到 客户端。
您可能会更改为其他Web服务器(或Web服务器配置),这会在输出之前缓冲整个脚本的输出。
答案 1 :(得分:1)
您正在寻找的设置在您的PHP.ini中,它被称为output_buffering:
; output_buffering
; Default Value: Off
; Development Value: 4096
; Production Value: 4096
手动将其设置为关闭并重新启动您的网络服务器以使flush()在您需要时实际刷新内容,而不是在4kb数据之后:)
请注意,ini_set并不总是必须为此工作。如果你想要完全控制,请在php.ini本身中禁用它,或者作为.htacces php_value标志
答案 2 :(得分:0)
浏览器决定何时输出内容。因此,如果您没有达到该阈值,他们只会等到它满足,然后才会向用户显示更多内容。
答案 3 :(得分:0)
尝试添加到.htaccess
php_value output_buffering Off