Php循环不在浏览器上更新

时间:2013-12-14 00:13:26

标签: javascript php loops

这是我的问题:

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

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

?>

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

2 个答案:

答案 0 :(得分:1)

你可以这样做:

<?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'); 

答案 1 :(得分:0)

这基本上是不可能的。

PHP在其引擎中使用自己的输出缓冲(php://output)。该缓冲区充满了您在代码中回显的数据。一旦引擎到达脚本的末尾,它将刷新整个缓冲区并将其附加到Web服务器开始创建的头信息中(假设它是网络服务器,它准备了对浏览器和PHP的响应)是添加实际内容的人。)

另一个限制是某些浏览器会等到整个HTTP请求完成后再开始渲染网站。不是所有人都这样做,而是一些人。

对于真实的实时动作,我建议使用AJAX或更现代的WebSockets。第二个更加活跃,因为它不会像AJAX一样重新加载。我建议你重新考虑一下你要做什么,以及它是否有必要。

如果您不明白任何内容,我建议您查看一些维基百科文章: