php ob_flush,flush在ie中缓冲无效的研究自己写了个小例子,想在页面每隔一秒输出一个数字。按照网上的代码:
ob_end_clean();
for ($i=10; $i>0; $i--)
{
echo $i;
flush();
sleep(1);
} 或者:
for ($i=10; $i>0; $i--)
{
echo $i;
ob_flush();
flush();
sleep(1);
} 我发现在火狐里面生效,但在IE里不起作用,每次都是10个数字一起输出,这说明缓冲没有生效。我又开始调整php.ini里面的output_buffering的设置,重启apache,依旧无效。然后我看到了一段话:一些版本的 Microsoft Internet Explorer 只有当接受到的256个字节以后才开始显示该页面,所以必须发送一些额外的空格来让这些浏览器显示页面内容。 罪恶的IE浏览器,问题就是TMD的多! 然后我修改了下程序,便正常了:
echo str_pad('',4096);
for ($i = 0; $i < 10; $i++) {
echo $i;
ob_flush();
flush();
sleep(1);
}---------------------------------------------------------------------------------------------
我按照上面的例子,连火狐都无法实现每隔一秒输出
ob_end_clean();
for ($i=10; $i>0; $i--)
{
echo $i;
flush();
sleep(1);
} 或者:
for ($i=10; $i>0; $i--)
{
echo $i;
ob_flush();
flush();
sleep(1);
} 我发现在火狐里面生效,但在IE里不起作用,每次都是10个数字一起输出,这说明缓冲没有生效。我又开始调整php.ini里面的output_buffering的设置,重启apache,依旧无效。然后我看到了一段话:一些版本的 Microsoft Internet Explorer 只有当接受到的256个字节以后才开始显示该页面,所以必须发送一些额外的空格来让这些浏览器显示页面内容。 罪恶的IE浏览器,问题就是TMD的多! 然后我修改了下程序,便正常了:
echo str_pad('',4096);
for ($i = 0; $i < 10; $i++) {
echo $i;
ob_flush();
flush();
sleep(1);
}---------------------------------------------------------------------------------------------
我按照上面的例子,连火狐都无法实现每隔一秒输出
解决方案 »
- php+mysql输出问题
- php 创建socket 服务器500错误 请教
- 如何在发布的文章中加入图片(刚学习不要见怪)
- php配置output_buffering =off时候我需要用session_start(),怎么用?请高手赐教!
- 关于用正则函数preg_match进行信息采集(二)
- 一个菜问题,不知道怎么描述,自动建立关键词
- sql语句在查询分析器中可以运行,php的mssql_query却报错:
- ACCESS的文件如何转为MYSQL数据库?
- php 继承,重写方法问题。
- Use of undefined constant position - assumed 'position' (this will throw an Erro
- 网站上鼠标点击可以拖拽的效果
- 急求各位高手大侠!!!
http://www.kenescat.com/files/source/php/20100428_001.php
set_time_limit(0);
function seeme(){
sleep(1);
echo "HELLO!".date('h:i:s')."<br>";
}ob_end_clean();
ob_start();while(1){ ob_flush();
flush();
seeme();
}
ignore_user_abort(true);
set_time_limit(0);
function seeme(){
sleep(1);
echo "HELLO!".date('h:i:s')."<br>";
}//ob_end_clean();
ob_start();while(1){ob_flush();
flush();
seeme();
}
这个是可以的,和你看的那个都一样,前几个一下就出来了,不过后面的是一个一个的
for ($i=10; $i>0; $i--)
{
echo $i;
ob_flush();
flush();
sleep(1);
}
在我这里运行良好 fx和ie都很好 我ie8
flush();
seeme();
}
这个不行,而且你是死循环的,永远出不来,所以是php.ini的设置问题吧
我是xampp的默认配置
flush();
sleep(1);
echo "HELLO!".date('h:i:s')."<br>";
}
给发个php.ini吧,[email protected],我的是虚拟主机
多谢了
ob_start();ob_end_flush();
ob_implicit_flush();
for($i = 1; $i <= 300; $i++ ) print(" ");
for($i = 1; $i <= 5; $i++ ) {
echo "a<br>";sleep(1);
}
试一试
ignore_user_abort(true);
set_time_limit(0);
ob_end_clean();
ob_start();//开始缓冲数据
while(1){
echo str_repeat(" ",1024);//ie有默认的1k buffer
ob_flush();
flush();
echo "hello----------";
echo date('h:i:s') . "<br>";
usleep(1000000);
}
The problem that you will run into on our hosting is the fact that we dynamically turn on and turn off mod_deflate, depending on how busy the server is. If the server has enough free CPU resources, it will automatically gzip-compress responses generated from php scripts. gzip compression needs and uses its own buffer. Unfortunately, this is in effect for the entire server and can't selectively be turned off. We apologize for the inconvenience.
<?php
ob_start();
ob_end_flush();
for($i = 1; $i <= 300; $i++ )echo ' ';$i = 0;
while(1) {
echo $i;
sleep(1);
$i++;
}
?>
1、必须有 Transfer-Encoding: chunked 头
2、输出一行前先要输出该行的字节数
3、输出完毕以单独一行“0”结尾HTTP/1.1 200 OK
Date: Wed, 05 May 2010 05:13:26 GMT
Content-Type: text/html
Transfer-Encoding: chunked22
<p>asdasdasdasdasdasdasdasdasd</p>
22
<p>asdasdasdasdasdasdasdasdasd</p>
0
header('Transfer-Encoding: chunked');
$line = str_pad(' ', 256);
echo dechex(strlen($line)), PHP_EOL;
echo $line, PHP_EOL;
$output = array(
'<h1>《送别》</h1>',
'</h2>作者:李叔同</h2>',
'<p>长亭外,古道边,芳草碧连天</p>',
'<p>晚风拂柳笛声残,夕阳山外山</p>',
'<p>天之涯,地之角,知交半零落</p>',
'<p>人生难得是欢聚,唯有别离多</p>',
'<p>长亭外,古道边,芳草碧连天</p>',
'<p>问君此去几时还,来时莫徘徊</p>',
'<p>天之涯,地之角,知交半零落</p>',
'<p>一壶浊洒尽余欢,今宵别梦寒 </p>'
);
foreach ($output as $line) {
echo dechex(strlen($line)), PHP_EOL;
echo $line, PHP_EOL;
ob_flush();
flush();
sleep(2);
}
echo '0',PHP_EOL;
?>
for ($i=10; $i>0; $i--)
{
printf("%500d", $i);
ob_flush();
flush();
sleep(1);
}
最后一行
echo '0',PHP_EOL;应为
echo '0',PHP_EOL,PHP_EOL;
ExePath=C:\Program Files\PHP\php-cgi.exe
ResponseBufferLimit=0
If the server has enough free CPU resources, it will automatically gzip-compress responses generated from php scripts.
按照描述,应该是空间提供商在PHP上加了层东西,类似fast-cgi之类的,这层东西会缓存PHP的输出,而又不受ob_flush的控制,没办法,认命吧。
http://topic.csdn.net/u/20100316/10/6b5c7db1-9eeb-4ec0-bc47-e075940b1868.html