输出控制函数可以用来控制脚本的输出。这些函数在某些特殊情况下很有用,特别是脚本中已经输出了信息之后再想向浏览器发送标头的情况。输出控制函数不会作用于
    header() 或 setcookie()
    函数发送的标头,而只会影响类似于 echo()
    函数输出的信息和嵌入在 PHP 代码之间的信息。
   
本函数库作为 PHP 内核的一部分,不用安装就能使用。
这些函数的行为受 php.ini 的影响。
  
表格 1. 输出控制配置选项
| 名称 | 默认值 | 作用范围 | 修正记录 | 
|---|
| output_buffering | "0" | PHP_INI_PERDIR |  | 
| output_handler | NULL | PHP_INI_PERDIR | 自 PHP 4.0.4 起可用 | 
| implicit_flush | "0" | PHP_INI_ALL | 在 PHP <= 4.2.3 版本中是 PHP_INI_PERDIR | 
  有关 PHP_INI_* 常量进一步的细节与定义参见
附录 G。
 
以下是配置选项的简要解释。
 
- output_buffering
    boolean/integer
- 
     该选项设置为 On
     时,将在所有的脚本中使用输出控制。如果要限制输出缓冲区的最大值,可将该选项设定为指定的最大字节数(例如
     output_buffering=4096)。从PHP
     4.3.5 版开始,该选项在 PHP-CLI 下总是为 Off。
     
- output_handler
    string
- 
     该选项可将脚本所有的输出,重定向到一个函数。例如,将 output_handler
     设置为 mb_output_handler()
     时,字符的编码将被修改为指定的编码。设置的任何处理函数,将自动的处理输出缓冲。
     
- implicit_flush
    boolean
- 
     默认为 FALSE。如将该选项改为 TRUE,PHP
     将使输出层,在每段信息块输出后,自动刷新。这等同于在每次使用
     print()、echo()
     等函数或每个 HTML 块之后,调用 PHP 中的
     flush() 函数。
     - 
     不在web环境中使用 PHP
     时,打开这个选项对程序执行的性能有严重的影响,通常只推荐在调试时使用。在
     CLI SAPI 的执行模式下,该标记默认为 TRUE。
     - 
     参见 ob_implicit_flush()。
     
    
| 例子 1. 输出控制例子 | 
<?php
 ob_start();
 echo "Hello\n";
 
 setcookie("cookiename", "cookiedata");
 
 ob_end_flush();
 
 ?>
 | 
 | 
   
    在上面的例子中,函数 echo()
    输出信息将被保存在输出缓冲中,直到
    ob_end_flush()
    函数被调用。和期望的一样,setcookie()
    函数存储 cookie
    的时候没有导致错误(通常情况下,已经有数据输出后,是不能正常地向浏览器发送标头的)。
   
注: 
     当从 PHP 4.1(包括 4.2)升级到 4.3 时,由于早期版本的 bug,必须确保在
     php.ini 中将implict_flush 设置成
     OFF,否则所有由
     ob_start() 函数处理的信息都会被直接输出。