首先来回顾下,php输出有哪些?
php的输出有echo、print、print_r、printf、var_dump、exit、以及php文件中的html内容,还有一个特殊的函数phpinfo。总之php输出就是php文件处理的结果内容(不包括header()、setcookie()等设置的头信息)。
php输出控制,实际是指php的输出缓存控制。php4逐渐完善了输出缓存控制,能够实现输出内容的二次处理。以PHP+Apache的服务组合来说明PHP的输出控制,见下图。
php默认配置是未开启输出缓存的,输出内容即时输出到apache缓存中,php脚本执行结束后,apache缓存中的内容才会发送到客户端(浏览器)。很多资料讲:“php未开启输出缓存时,php的输出会即时输出到客户端”,这种描述不够准确,以至于很多人对下面案例产生不理解。
服务端环境及配置:
- PHP5.3.x + Apache2.2.x
- PHP作为Apache模块安装
- PHP配置 output_buffering = Off
PHP应用程序:
<?php
echo str_repeat("abcdefg", 200);
sleep(5);
echo "</br>end";
?>
浏览器访问时,并不能即时看到200个abcdefg的输出串,而是在脚本执行完后,浏览器界面将200个abcdefg和</br>end一起输出。这就说明了:此时,php的输出在apache的缓存中,脚本执行结束后,apache将缓存中的数据输出到浏览器。
在php3的时候,php就提供了一个函数来控制apache的缓存输出,这个函数就是flush,注意,这个函数不属于php输出缓存控制函数,这个函数控制的是apache的缓存(上图粉色部分)输出。
php的输出缓存控制是指控制php输出到apache的过程,未开启php输出缓存时,php直接输出到apache,apache将数据缓存下来;开启php输出缓存时,php输出到自己缓存中(上图蓝色部分)。
接下来,提三个问题,帮助初学者清楚的认识php的输出缓存控制。
- 怎么开启php输出缓存;
- 开启php输出缓存了,之后怎么控制缓存中的数据输出到apache,进而输出到浏览器;
- 开启php输出缓存,及对php输出缓存的控制对于phper来说有什么意义。
- 开启php缓存有两种办法:
全局开启——修改php.ini中的配置项output_buffering = On
会话开启——调用ob_start。注意,这里不要用ini_set("output_buffering",1)
- php输出控制函数:
ob_flush
ob_end_flush
ob_clean
ob_end_clean
ob_get_contents
ob_get_clean
ob_get_flush
- php输出缓存控制应用
未完待续……