Php ob_flush()在我的服务器上不工作

Php ob_flush()在我的服务器上不工作,php,apache,io,output-buffering,Php,Apache,Io,Output Buffering,这个功能在我的另一台服务器和本地pc上都能很好地工作,每秒钟显示一次数字,但当我从客户端发送云代码时,它只在页面加载100%后显示结果 它在这里工作正常: 在这种情况下,仅当页面完全加载时: 两台服务器都有相同的PHP版本5.4.45 <?php for($i=0; $i<20; $i++) { echo 'printing...'."<p>"; ob_flush(); flush(); sleep(1); } ?>

这个功能在我的另一台服务器和本地pc上都能很好地工作,每秒钟显示一次数字,但当我从客户端发送云代码时,它只在页面加载100%后显示结果

它在这里工作正常:

在这种情况下,仅当页面完全加载时:

两台服务器都有相同的PHP版本5.4.45

<?php
for($i=0; $i<20; $i++) { 
    echo 'printing...'."<p>";
    ob_flush(); 
    flush(); 
    sleep(1); 
}
?> 

解决方案

输出缓冲=关闭

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);
}
ob\u隐式\u刷新(1);

对于($i=0;$i,正如您所提到的,您在注释中没有看到
output\u buffering
的任何值,我假设它在您的服务器中已关闭

如果您正在使用自己的服务器,请在
phpinfo
页面(我要求您在注释中创建)中查找
配置文件(php.ini)路径
选项

然后打开该文件,找到
;output_buffering=Off
行,并将其更改为:

output\u buffering=4096

您可能需要重新启动apache服务器(或者web服务器,如果它不同的话)

=============================================================

如果您使用的是共享主机,大多数主机提供商都允许您通过将
php.ini
文件添加到
public\u html
文件夹来添加自己的配置

创建一个名为
php.ini
的文件,并在其中包含
output\u buffering=4096
,然后将其上载到您的
public\u html
文件夹。它应该可以工作


希望有帮助:)如果您有任何疑问,请随时提问。

可能重复:这个问题没有解决我的问题。在生产中,可能有一个代理服务器,PHP由另一个进程通过(F)CGI执行。代理可能被配置为在将完整响应传递给客户端之前对其进行缓冲。您永远不需要使用像这样的“真实”代码,因此只需继续说明它不起作用,并研究如何使用队列、ajax、websockets、sse等来共享主机?还是你自己的服务器?服务器中的输出缓冲似乎已关闭。您需要编辑php.ini文件,取消注释
output\u buffering=Off”选项,并将其设置为
output\u buffering=On
output\u buffering=4096`