我的冲洗机制停止工作,我不知道为什么。 我现在正试图运行一个简单的冲洗示例,没有运气:
echo "before sleep";
flush();
sleep(5);
echo "after sleep";
在做了一些阅读之后,我最近在我的服务器上安装了ngin x,我要求为我的域禁用它。 (服务器管理员说他为此特定域禁用了它)
另外,我尝试禁用gzip,将这些行添加到.htaccess
SetOutputFilter DEFLATE
SetEnv no-gzip dont-vary
另外,尝试将这些添加到我的php文件
ini_set('output_buffering','on');
ini_set('zlib.output_compression', 0);
没有任何帮助。它睡了5秒然后将所有内容显示在一起。 我之前一直在使用它,并且一直在使用输出缓冲区(ob_start,ob_flush等,现在只是试图让最简单的例子工作)
答案 0 :(得分:0)
“停止工作”是一个非常高的水平。实际上你应该看一下有效与否的结果。
这可以通过监控网络流量来完成。您将看到已经完成了多少响应以及发送的编码。
如果响应被压缩,大多数压缩函数在压缩它们之前需要一定数量的字节。因此,即使您使用flush()
来表示PHP刷新输出缓冲区,仍然可以在PHP输出过滤中或服务器等待更多来进行压缩。因此,在apache完成压缩之后,检查您的PHP配置是否也进行压缩并禁用它。
如果您不想监控网络流量,curl
命令行实用程序也能很好地显示正在发生的事情,并且可能更容易使用它而不是网络监控
curl -Ni --raw URL
确保使用-N
开关,该开关将禁用curl
的缓冲,以便您直接看到脚本/服务器输出。
请参阅我之前的回答中的Inspecting HTTP Compression Problems with Curl部分,其中显示了一些curl
命令,用于在压缩完成后查看请求的输出。
curl
能够显示最终未压缩的压缩数据,并且您可以为每个请求禁用压缩,因此无论服务器或PHP输出压缩设置如何,您都可以测试更多差异化。
答案 1 :(得分:0)
<?php
ini_set('zlib.output_handler', '');
ini_set('zlib.output_compression', 0);
ini_set('output_handler', '');
ini_set('output_buffering', false);
ini_set('implicit_flush', true);
apache_setenv( 'no-gzip', '1' );
for($i = 0; $i < 5; $i++){
echo str_repeat(chr(0), 4096); #flood apache some null bytes so it feels the packet is big enough to be sent...
echo "$i<br/>";
flush();
sleep(1);
}
?>