输出控制函数可以用来控制脚本的输出。这些函数在某些特殊情况下很有用,特别是脚本中已经输出了信息之后,再想向浏览器发送头信息的情况。输出控制函数不会作用于 header() 或 setcookie() 函数发送的头信息,而只会影响类似于 echo() 函数输出的信息和嵌入在 PHP 代码之间的信息。
无需外部库文件就可以加入本扩展模块的支持。
这些函数作为 PHP 核心的一部分,无需被安装即可使用。
这些函数的行为受到全局配置文件 php.ini 的影响。
表格 1. 输出控制 配置选项
名称 | 默认值 | 作用范围 |
---|---|---|
output_buffering | "0" | PHP_INI_PERDIR|PHP_INI_SYSTEM |
output_handler | NULL | PHP_INI_PERDIR|PHP_INI_SYSTEM |
implicit_flush | "0" | PHP_INI_PERDIR|PHP_INI_SYSTEM |
以下是该配置选项的简要解释。
本标记设置为 On 的时,将在所有的脚本中使用输出控制。如果要限制输出缓冲区的最大值,可以将标记设置成该最大字节数(例如, output_buffering=4096)。
该标记可将脚本所有的输出,重定向到一个函数。例如,将 output_handler 设置为mb_output_handler()时, 字符的编码将被修改为指定的编码。设置的任何处理函数,将自动的处理输出缓冲。
注: 不能同时使用mb_output_handler()和ob_inconv_handler() , 也不能同时使用ob_gzhandler()和zlib.output_compression。
默认为 FALSE 。如将该标记改为 TRUE ,PHP将使输出层,在每段信息块输出后,自动刷新。 这等同于在每次使用print(),echo() 等函数 或每个HTML块之后, 调用PHP中的flush()函数。
不在web环境中使用PHP时,打开这个选项对程序执行的性能有严重的影响,通常只推荐在调试时使用。 在CLI SAPI的执行模式下,该标记默认为 TRUE 。
该扩展模块未定义任何资源类型。
该扩展模块未定义任何常量。
在上面的例子中,函数 echo() 输出信息将被保存在输出缓冲中,直到 ob_end_flush() 函数被调用。和期望的一样,setcookie() 函数存储 cookie 的时候没有导致错误。(通常情况下,已经有数据输出后,是不能正常的向浏览器发送头信息的。)
注: 当从 PHP 4.1(包括 4.2)升级到 4.3 时,由于早期版本的 bug,必须确保在 php.ini 中将implict_flush 被设置成 OFF,否则所有由 ob_start() 函数处理的信息都会被直接输出。
相关函数:header() 和 setcookie()。