如何利用PHP的输入输出缓冲让PHP脚本运行得更加快速和高效。下面主要介绍PHP输入输出缓冲的实战技术。

在PHP中,对缓冲的操作以及与缓冲相关的函数名均以ob_开头。在PHP脚本中开启输出缓冲,只要在脚本首行声明ob_start()函数即可,这样我们就可以打印任何文本或要显示的HTML页面。虽然输出缓冲打开了,但是在PHP脚本没有执行结束之前,是不会有任何输出发送到客户端浏览器的,这可能不是我们想要的结果,因为尤其是运行了一个很长时间的脚本时,客户端浏览器会长时间显示空白页面或停止响应,这是一个很烦人的用户体验。

不过这也是可以解决的,我们可以立即将缓冲做“flush”输出。使用ob_flush()函数,当这个函数执行后,在之前已经运行和收集到的输出缓冲会被立即发送到客户端,然后再输出ob_flush()函数后面的缓冲。我们也可以清空收集到的输出缓冲区的内容,可以使用ob_clean()函数,这个函数将完全情况所有的输出缓冲。

如果在一个脚本中做输出缓冲时需要马上结束,我们可以使用两种函数:ob_end_clean()和ob_end_flush()。ob_end_clean()表示结束输出缓冲功能,凡是已经收取的数据会被立即抛弃。ob_end_flush()函数功能也是结束缓冲,但会先将已经收取的输出缓冲输出到客户端再抛弃。因此,大部分时候,我们使用的是ob_end_flush()函数。

输出缓冲一个最大好处还不仅在于此,而是输出缓冲能够实现多层次。例如:


在上面的例子中,第二个缓冲是不会送到客户端,而第一个缓冲可以看到。

下面说说从缓冲读取内容

在PHP中,使用ob_get_contents()函数打开并读取一个缓冲区内容。ob_get_contents函数没有参数,它返回的内容是最近使用的缓冲,例如:
$result = mysql_query(“select * from table where id=55”);
while($row = mysql_fetch_assoc($result)){
print(…);
}

如果不想把数据输出到浏览器上,而是直接输出到文件中,这就需要使用到ob_get_contents()和 ob_get_length()函数。例如:
ob_start();
$result = mysql_query(“select * from table where id=55”);
while($row = mysql_fetch_assoc($result)){
print(…);
}
$output = ob_get_contents();
$ob_length = ob_get_length();
ob_end_clean();
file_put_contents(“employee.txt”,$output); //输出到employment文件中
echo “缓冲区内容长度为$ob_length”;

下面介绍一下在缓冲技术中使用回调函数

回调函数的意思是将函数的名字作为参数传递给ob_start()函数,当开始一个新的缓冲输出时,就调用这个函数,这意味着在输出内容之前,可以任意修改要输出的内容,然后在发送出去。例如:

在上面的例子中,我们用了输出回调方法增加“CCJK”到后面输出内容的尾部。

我们还可以通过替换函数来替换输出的内容,这样我们就可以灵活地控制数据的输出。
精彩内容,下节再续…