LXXVIII. 输出控制函数

介绍

输出控制函数可以用来控制脚本的输出。这些函数在某些特殊情况下很有用,特别是脚本中已经输出了信息之后,再想向浏览器发送头信息的情况。输出控制函数不会作用于 header()setcookie() 函数发送的头信息,而只会影响类似于 echo() 函数输出的信息和嵌入在 PHP 代码之间的信息。

需求

无需外部库文件就可以加入本扩展模块的支持。

安装

这些函数作为 PHP 核心的一部分,无需被安装即可使用。

运行时配置

这些函数的行为受到全局配置文件 php.ini 的影响。

表格 1. 输出控制 配置选项

名称默认值作用范围
output_buffering"0"PHP_INI_PERDIR|PHP_INI_SYSTEM
output_handlerNULLPHP_INI_PERDIR|PHP_INI_SYSTEM
implicit_flush"0"PHP_INI_PERDIR|PHP_INI_SYSTEM
更多关于常量 PHP_INI_* 的细节和解释参见 ini_set().

以下是该配置选项的简要解释。

output_buffering boolean/integer

本标记设置为 On 的时,将在所有的脚本中使用输出控制。如果要限制输出缓冲区的最大值,可以将标记设置成该最大字节数(例如, output_buffering=4096)。

output_handler string

该标记可将脚本所有的输出,重定向到一个函数。例如,将 output_handler 设置为mb_output_handler()时, 字符的编码将被修改为指定的编码。设置的任何处理函数,将自动的处理输出缓冲。

注: 不能同时使用mb_output_handler()ob_inconv_handler() , 也不能同时使用ob_gzhandler()zlib.output_compression

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()

目录
flush -- Flush the output buffer
ob_clean --  Clean (erase) the output buffer
ob_end_clean --  Clean (erase) the output buffer and turn off output buffering
ob_end_flush --  Flush (send) the output buffer and turn off output buffering
ob_flush --  Flush (send) the output buffer
ob_get_clean --  Get current buffer contents and delete current output buffer
ob_get_contents --  Return the contents of the output buffer
ob_get_flush --  Flush the output buffer, return it as a string and turn off output buffering
ob_get_length --  Return the length of the output buffer
ob_get_level --  Return the nesting level of the output buffering mechanism
ob_get_status --  Get status of output buffers
ob_gzhandler --  ob_start callback function to gzip output buffer
ob_implicit_flush --  Turn implicit flush on/off
ob_list_handlers --  List all output handlers in use
ob_start -- Turn on output buffering
output_add_rewrite_var --  Add URL rewriter values
output_reset_rewrite_vars --  Reset URL rewriter values