Php ob_flush()在我的服务器上不工作
这个功能在我的另一台服务器和本地pc上都能很好地工作,每秒钟显示一次数字,但当我从客户端发送云代码时,它只在页面加载100%后显示结果 它在这里工作正常: 在这种情况下,仅当页面完全加载时: 两台服务器都有相同的PHP版本5.4.45Php 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); } ?>
<?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`