Php循环不会在浏览器上更新


Php loop dont update on browser

这是我的一个问题:

加载循环时如何在浏览器(chrome、firefox)上更新页面,例如:

<?php
   $var = 0;
   while($var != 10){
      echo $var;
      $var++;
      sleep(1);
   }
?>

页面不更新,只有在php脚本执行完成后,有什么可以帮助我的吗?谢谢

你可以这样做:

<?php
    if (ob_get_level() == 0) ob_start();
   for ($var = 0; $var <= 10; $var++) {
      echo $var;
      ob_flush();
      flush(); // echo output buffer to client
      sleep(1);
   }
   ob_end_flush();
?>

要做到这一点,你应该在PHP设置中禁用输出压缩,如下所示:

zlib.output_compression = Off

或者尝试在代码中禁用它(如果允许):

 if(ini_get('zlib.output_compression'))
    ini_set('zlib.output_compression', 'Off'); 

这基本上是不可能的。

PHP在其引擎中使用自己的输出缓冲(php://output)。这个缓冲区会被您在代码中回显的数据填满。一旦引擎到达脚本的末尾,它将刷新整个缓冲区,并将其附加到Web服务器开始创建的头信息中(想象一下,Web服务器是预先向浏览器发送响应的服务器,PHP是添加实际内容的服务器)。

另一个限制是,一些浏览器会等到整个HTTP请求完成后才开始呈现网站。并非所有人都这样做,但也有一些人这样做。

对于实际操作,我建议使用AJAX或更现代的WebSockets。第二个更加实时,因为它不会像AJAX那样偶尔重新加载。我建议你重新思考你想做什么,如果有必要的话。

如果你什么都不懂,我建议你看看维基百科上的一些文章:

  • AJAX:http://en.wikipedia.org/wiki/Ajax_(编程)
  • WebSockets:http://en.wikipedia.org/wiki/WebSocket