flush函数暂时删除我的html

时间:2016-09-26 01:20:20

标签: php html flush

注意:是的我曾经问过这个问题,但它立即被标记为副本,尽管链接的副本几乎与我的问题无关。

我写了一个php脚本,正在执行我的应用程序以从网上下载图像。为了显示我的网站上取得了某些进展,我使用了flush来回应用户的一些信息。这是我的代码:

      echo '<li class="list-group-item list-group-item-info">Starting to gather data!</li>';
      ob_flush();
      flush();
      $url = $unsplash;
      $cmd = $unsplash . ' - ' . $amount;
      exec($cmd);
      echo '<li class="list-group-item list-group-item-success">Gathering Data Completed</li>';
      ob_end_flush();

我正在使用的代码没有任何问题(除了这个),所以没有错误!

不幸的是,我在php脚本下编写的每种HTML内容都会在脚本执行期间被删除(有时可能需要5分钟)。但是在脚本完成后立即重新出现内容。值得一提的另一件事是,当我在执行scipt期间在Chrome(F12)中打开DevTools时没有显示任何内容!

我做错了吗?我似乎无法弄清楚......

谢谢

1 个答案:

答案 0 :(得分:1)

我不确定,“被删除”究竟是什么意思,但你需要考虑的是输出缓冲可能发生在多个层面(PHP,Web服务器,客户端) UA等。)。

如果脚本的输出没有立即显示,则可能是您在更高级别启用了output_buffering(即在您的php.ini或其他加载的配置中)。由于输出缓冲级联,它们在每个级别刷新。检查您的phpinfo(),如果您看到0以外的值output_buffering,则需要编辑加载配置下的phpinfo()中显示的php.ini文件(靠近顶部)并将该值更改为0,然后重新启动父PHP进程。

另一件需要考虑的事情是,某些浏览器不会呈现某些HTML块级元素,例如<div><ul>等......直到它们被关闭。内容可能已到达客户端,但某些浏览器在块级元素完成之前不会处理内容的呈现。因此,测试在客户端上接收输出而没有这些可变细微差别的更好方法可能是从PHP发送文本/纯内容类型标头以使HTML呈现内容不受影响。 header('Content-type: text/plain'),如果在PHP中关闭output_buffering仍然无法提供所需的结果。