宝马娱乐在线112222 > 网络应用 > php利用flush() ob_flush() 实现字符串逐条输出

原标题:php利用flush() ob_flush() 实现字符串逐条输出

浏览次数:167 时间:2019-10-01

ob_end_clean(); //清除输出缓存并且关闭缓存
echo str_pad(' ',256);//输出256字节空格(在ie浏览器下要接受大于256个字节才会输出显示

下面测试ob缓存和程序缓存: 在测试前为了测试效果更明显,我们在php.ini里先关闭ob缓存并设置明显的错误级别。
Output_buffering=off
Display_errors=on
代码1:

 代码如下

复制代码 代码如下:

for($i=0;$i<5;$i++){
  
echo '<br/>abc___'.$i;
flush();
ob_flush();
sleep(1);
}

echo "php";
header("content-type:text/html;charset='utf-8'");
echo 'ok';

该方法在opera下不可用,因为opera浏览器在不遇到一个html标签之前是不输出内容的

则会出现
php
Warning: Cannot modify header information - headers already sent by (output started at D:wwwapachehtdocstestt2.php:2) in D:wwwapachehtdocstestt2.php on line 3
ok
代码2:

复制代码 代码如下:

ob_start();
 echo "php";
 header("content-type:text/html;charset='utf-8'");
 echo 'ok';

结果就完全正确了

原因分析:
代码1:
Php在echo ‘php'时已经向浏览器发送一个头信息,
当再出现
header("content-type:text/html;charset='utf-8'");
又看到一个头信息,这时已经打回了上面的头信息,无法更该便出错了。
代码2:开启了ob缓存,echo ‘php'时把要打给浏览器的数据先放到ob缓存里,之后又遇到一个头信息,也放入Ob缓存,页面结束时再按http协议到程序缓存后返回给浏览器。
为加深理解再看以下代码
代码3:

复制代码 代码如下:

ob_start();
echo "php";
header("content-type:text/html;charset='utf-8'");
echo 'ok';
echo '<hr/>';
$ob=ob_get_contents();
echo $ob;

会输出

图片 1

Ob_get_contents()只是取得ob缓存里的内容而不清楚它们
Ob_get_contents()必须在ob缓存没有清除前使用
代码4:

复制代码 代码如下:

ob_start();
 echo "php";
 ob_clean();//清除缓存内容但不关闭缓存区,还能用(往里添加东西)
 header("content-type:text/html;charset='utf-8'");
 echo 'ok';
 echo '<hr/>';
 $ob=ob_get_contents();
 echo $ob;

结果:

图片 2
代码5:

复制代码 代码如下:

ob_start();
echo "php";
ob_end_clean();//清空缓存内容并关闭缓存区,ob_get_contents取不到内容
header("content-type:text/html;charset='utf-8'");
echo 'ok';
echo '<hr/>';
$ob=ob_get_contents();
echo $ob;

结果:

图片 3 代码6:

本文由宝马娱乐在线112222发布于网络应用,转载请注明出处:php利用flush() ob_flush() 实现字符串逐条输出

关键词:

上一篇:宝马娱乐在线:php iconv() 编码转换出错 Detected

下一篇:【宝马娱乐在线】PHP file_put_contents()实现批量下载