2013-12-14 98 views
0

更新这是一个问题,我有:PHP的循环不要在浏览器

如何更新浏览器的页面(浏览器,Firefox)时,回路的负载,例如:

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

?> 

页不要更新,只有在PHP脚本执行完成后,任何东西都可以帮助我?谢谢。

+9

PHP的服务器上运行 - 如果你需要在浏览器窗口中“实时”的东西,你需要使用浏览器中运行的东西(例如Javascript)。 – Floris

+2

为什么你会在那里使用'sleep()'? – randak

+0

@randak也许只是为了好玩..我也这样做过..就像测试longpolling .. – Hardy

回答

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'); 
+0

缺少一个'{'。刚刚在http://www.floris.us/SO/liveEcho.php上测试过 - 似乎没有用。 – Floris

+0

是的..谢谢..修复。 – Hardy

+0

修正了'{'但是看到我的链接。这段代码的精确副本(带有“{”) - 在我的浏览器中全部显示(10秒后)。 – Floris

0

这基本上是不可能的。

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

另一个限制是某些浏览器等到整个HTTP请求完成后才开始渲染站点。并非所有这些,但一些。

对于真实的活动,我会推荐AJAX或更现代的WebSockets。第二个更生动,因为它不会像AJAX一样重新加载。我建议你重新考虑你想要做什么,如果它是必要的。

一些维基百科文章,我建议你看看,如果你不明白什么: