这是我的一个问题:
加载循环时如何在浏览器(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