【发布时间】:2018-07-13 15:22:05
【问题描述】:
此功能在我的另一台服务器上完美运行,在我的电脑上本地显示每秒的数字,但是当我从客户端发送云代码时,它仅在页面加载 100% 后显示结果。
它在这里正常工作: http://kicklaunch.me/buffer.php
仅当页面完全加载时: http://raio.adm.br/buffer.php
两台服务器的 PHP 版本相同 5.4.45
<?php
for($i=0; $i<20; $i++) {
echo 'printing...'."<p>";
ob_flush();
flush();
sleep(1);
}
?>
解决方案
output_buffering = 关闭
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);
}
【问题讨论】:
-
这个问题没有解决我的问题。
-
在生产中可能有一个代理服务器,PHP 由另一个进程通过 (F)CGI 执行。代理可以配置为在将完整响应传递给客户端之前对其进行缓冲。
-
你永远不需要使用这样的“真实”代码,所以继续前进,它不起作用并研究使用队列、ajax、websockets、sse 等
-
您使用的是共享主机吗?还是你自己的服务器?您的服务器中的 output_buffering 似乎已关闭。您需要编辑 php.ini 文件并取消注释
output_buffering = Off' option and set it tooutput_buffering = Onoroutput_buffering = 4096`
标签: php apache io output-buffering