PHP 手册
后退 |  | 前进

# CI. Output Control 输出控制函数

# 简介

输出控制函数可以用来控制脚本的输出。这些函数在某些特殊情况下很有用，特别是脚本中已经输出了信息之后再想向浏览器发送标头的情况。输出控制函数不会作用于 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() 时，字符的编码将被修改为指定的编码。设置的任何处理函数，将自动的处理输出缓冲。

  > 注: 不能同时使用 mb_output_handler() 和 ob_iconv_handler()，也不能同时使用 ob_gzhandler() 和 zlib.output_compression。

  > 注: 只有内置函数可以使用此指令。对于用户定义的函数，使用 ob_start()。

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() 函数处理的信息都会被直接输出。

# 参见

参见 header() 和 setcookie()。

后退 | 起点 | 前进
ora_rollback | 上一级 | flush