2

我在一个 PHP 项目上工作,我使用flush().

我做了很多搜索,发现 PHP 将脚本的长输出分块发送到浏览器,并且在脚本终止时不会发送所有巨大的数据。

我想知道这些数据的大小,我的意思是 PHP 必须输出多少字节才能将它们发送到浏览器。

4

2 回答 2

3

将数据分块的不仅是 PHP;这实际上是 Apache(或 Tomcat 等)的工作。这就是为什么默认是关闭 PHP 中的“分块”并将其留给 Apache。即使你从 PHP 强制刷新,它仍然会被 Apache 困住。从手册:

flush() 可能无法覆盖 Web 服务器的缓冲方案,并且它对浏览器中的任何客户端缓冲都没有影响。它也不会影响 PHP 的用户空间输出缓冲机制。这意味着如果您正在使用 ob_flush() 和 flush() 来刷新 ob 输出缓冲区,则必须调用它们。

有一篇关于传输编码/分块的维基百科文章:http ://en.wikipedia.org/wiki/Chunked_transfer_encoding

Apache 使用 GZIP 或 deflate 编码变得更加复杂;您需要访问 apache 服务器来了解如何配置它。

于 2012-08-08T05:29:46.690 回答
0

我认为你错了看到这段代码

echo str_repeat(' ',1024);
for($i=0;$i<10;$i++){
echo $i;
flush();
sleep(1);   

如果你运行它,就会看到每 1 个字节发送到浏览器并打印 //str_repeat 用于浏览器缓冲区,用于显示数据,仅此而已

于 2012-08-08T11:37:17.270 回答