我从事PHP项目,并使用flush()
。
我做了很多搜索,发现PHP在块中将大量脚本输出发送到浏览器,并且在脚本终止时不会发送所有大量数据。
我想知道这些数据的大小,我的意思是PHP必须输出多少字节才能将它们发送到浏览器。
答案 0 :(得分:3)
PHP不仅可以分块数据;它实际上是Apache(或Tomcat等)的工作。这就是默认情况下关闭PHP中的“分块”并将其留给Apache的原因。即使你强制从PHP中刷新,它仍然可能被Apache困住。从手册:
flush()可能无法覆盖您网络的缓冲方案 服务器,它对任何客户端缓冲没有影响 浏览器。它也不会影响PHP的用户空间输出缓冲 机制。这意味着你必须同时调用ob_flush()和 flush()用于刷新ob输出缓冲区,如果你正在使用它们。
有一篇关于传输编码/分块的维基百科文章:http://en.wikipedia.org/wiki/Chunked_transfer_encoding
Apache使用GZIP或deflate编码变得更复杂;你需要在apache服务器上找到你如何配置它。
答案 1 :(得分:0)
echo str_repeat(' ',1024);
for($i=0;$i<10;$i++){
echo $i;
flush();
sleep(1);
如果你运行它,看到每1个字节发送到浏览器并打印 // str_repeat用于显示数据的浏览器缓冲区