每次循环执行时都可以回显吗?例如:
foreach(range(1,9) as $n){
echo $n."\n";
sleep(1);
}
Run Code Online (Sandbox Code Playgroud)
我不想在循环结束时打印所有内容,而是希望每次打印每个结果.
小智 38
消除nginx缓冲的最简单方法是发送标头:
header('X-Accel-Buffering: no');
Run Code Online (Sandbox Code Playgroud)
这消除了双方proxy_buffering和(如果你有nginx的> = 1.5.6) fastcgi_buffering.如果你使用php-fpm,fastcgi位是至关重要的.根据需要,标题也更方便.
关于fastcgi_buffering的X-Accel-Buffering 文档的文档
Rog*_*ger 34
最终解决方案
这就是我发现的:
Flush在Apache的mod_gzip或Nginx的gzip下不起作用,因为从逻辑上讲,它正在压缩内容,为此,它必须缓冲内容以对其进行gzip.任何类型的Web服务器gzipping都会影响这一点.简而言之,在服务器端,我们需要禁用gzip并减少fastcgi缓冲区大小.所以:
在php.ini中:
.output_buffering =关闭
.zlib.output_compression =关闭
在nginx.conf中:
.gzip off;
.proxy_buffering off;
也有这些线,特别是如果你没有访问php.ini:
@ini_set( '要用zlib.output_compression',0);
@ini_set( 'implicit_flush',1);
@ob_end_clean();
参数或者set_time_limit(0);
最后,如果你有它,请在下面编写代码:
ob_start( 'ob_gzhandler');
使用ob_flush();
PHP测试代码:
ob_implicit_flush(1);
for($i=0; $i<10; $i++){
echo $i;
//this is for the buffer achieve the minimum size in order to flush data
echo str_repeat(' ',1024*64);
sleep(1);
}
Run Code Online (Sandbox Code Playgroud)
有关:
Ond*_*zka 26
在nginx服务器上轻松解决:
fastcgi_keep_conn on; # < solution
proxy_buffering off;
gzip off;
Run Code Online (Sandbox Code Playgroud)
Red*_*arf 10
在一些特定情况下,我不想为整个服务器或整个目录关闭gzip,仅针对几个脚本.
所有你需要的是在回声之前:
header('Content-Encoding: none;');
Run Code Online (Sandbox Code Playgroud)
然后正常进行刷新:
ob_end_flush();
flush();
Run Code Online (Sandbox Code Playgroud)
Nginx似乎已经关闭了已经关闭的编码并且没有gzip.
您需要将php的缓冲区刷新到浏览器
foreach(range(1,9) as $n){
echo $n."\n";
flush();
sleep(1);
}
Run Code Online (Sandbox Code Playgroud)
请参阅:http://php.net/manual/en/function.flush.php
| 归档时间: |
|
| 查看次数: |
25079 次 |
| 最近记录: |