【问题标题】:php remove output bufferingphp删除输出缓冲
【发布时间】:2014-04-11 18:46:25
【问题描述】:

我在我的 PHP 页面上进行了大量处理,我想向用户显示进度信息,例如,完成 10% 20% 等等。现在的情况是,所有的数据都是处理完后一次性显示出来的,我怎么能马上显示呢!

我尝试在php.ini 中设置注释输出缓冲区,并尝试在echo 语句之后使用flush(),不工作,有什么建议吗?

这是我的代码:

ob_start();
while ($line = read_file_line("c:/1.txt")) {  
  $read_lines_count++;
  if($read_lines_count % 100 == 0) {
    echo "parsed $read_lines_count <br />";
  ob_flush();
  }
}

【问题讨论】:

  • 这也取决于服务器配置。如果您想确定,请将作业分成几部分并使用 ajax。当然,如果 ajax 是一种选择。
  • @xd6_ 我刚试过,不行 :( 仍然等到处理完成...
  • @jeroen,我可以访问服务器,我需要在 php.ini 中进行任何更改吗?
  • @AminM 我不确定,涉及的不仅仅是 php。

标签: php output-buffering


【解决方案1】:

首先您需要在打印任何代码之前调用ob_start()

然后回显你想要的任何内容

当你想在屏幕上显示缓冲区时调用ob_flush()

最后,调用ob_end_flush() 以结束缓冲并显示输出。

确保您的 php.ini 中有这一行未注释

output_buffering = On

更多信息:http://www.php.net/manual/en/book.outcontrol.php

【讨论】:

  • @AminM 您需要在 php.ini 中明确设置 output_buffering 为 true,注释该行会将其设置为 false(默认的 apache 值)。执行var_dump(ini_get('output_buffering')),它会显示 output_buffering 配置
  • 我刚刚做了字符串'4096' (length=4)
  • @AminM 这意味着它最多可以缓冲 4086 字节。写在你的 php.ini output_buffering = On php.net/manual/en/…
  • 是的,对不起!我的意思是说我将其设置为 on,vardump is string: 1 :(
  • @AminM 你确定文件足够长吗?如果您在本地主机上尝试它可能是即时的,或者如果文件在远程主机上小于 1Mb 并且甚至无法注意到它正在缓冲,它可能会很快。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多