2653885 发表于 2017-3-4 06:47:29

php输出控制

  首先来回顾下,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输出缓存控制应用
  未完待续……
页: [1]
查看完整版本: php输出控制