Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在所有浏览器上正确显示每次回显时的输出?_Php_Browser_Output Buffering - Fatal编程技术网

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设置可能会有所帮助,但如果不是这样的话,我建议您寻找另一种解决方案。