php输出缓冲技术应用实践


PHP #缓冲2014-04-09 11:30
先看下面的这段php代码:

<?php
//打开缓冲区
ob_start();
//打印内容
echo "这是一个网的php教程";
//设置cookie
setcookie('php','yige.org');
//再打印输出内容
echo "<br>php输出缓冲技术演示";


输出缓冲打开了,即实现了php脚本还没有执行结束之前,是不会输出任何内容到浏览器的,这当然是不合理的,因为如果脚本的执行时间过长,页面长时间显示空白,这种用户体验可想而知!


有办法解决:ob_flush()函数会将已经运行的和收集到的输出缓冲立即发送给客户端:

<?php
//打开缓冲区
ob_start();
//打印内容
echo "php教程";
//ob_flush操作,立即将上面的字符串发送到客户端浏览器
ob_flush();
//再打印输出内容
echo "<br>php输出缓冲技术演示";
上段php代码运行结果如下:

php教程
php输出缓冲技术演示


可能因为脚本很小的原因,我们很难看到先输出“php教程”字符串,可以这样,用ob_clean()将输出

缓冲给清空:

<?php
//打开缓冲区
ob_start();
//打印内容
echo "php教程";
//ob_flush操作,立即将上面的字符串发送到客户端浏览器
ob_clean();
//再打印输出内容
echo "<br>php输出缓冲技术演示";


上面php代码运行结果如下:

php输出缓冲技术演示

如果在一个脚本中做输出缓冲时需要马上结束,但是会将已收到的输出缓冲输出到客户端浏览器。


就用ob_end_flush()函数


从缓冲读取内容:(使用ob_get_contents()函数)

<?php
ob_start();
echo "Hello ";
$out1 = ob_get_contents();
echo "World";
$out2 = ob_get_contents();
ob_end_clean();
var_dump($out1, $out2);
file_put_contents("php.txt", $out2);  //最后把数据输出到文件中


最后提一个非常使用的功能,那就是回调函数:

<?php
//使用回调函数改变输出内容
function myob_callback($con){
	$con .= 'http://yige.org/';
	return $con;
}
ob_start('myob_callback');
echo "一个网在线教程";



这段php代码的运行结果:


一个网在线教程 http://yige.org/


当然你可以写出更使用的回调函数,替换内容等等。你还可以参考这篇文章 http://yige.org/p/97

相关文章

粤ICP备11097351号-1