Php/docs/function.ob-start
ob_start
(PHP 4, PHP 5, PHP 7)
ob_start — 打开输出控制缓冲
说明
ob_start
([ callable $output_callback
= null
[, int $chunk_size
= 0
[, int $flags
= PHP_OUTPUT_HANDLER_STDFLAGS
]]] ) : bool
此函数将打开输出缓冲。当输出缓冲激活后,脚本将不会输出内容(除http标头外),相反需要输出的内容被存储在内部缓冲区中。
内部缓冲区的内容可以用 ob_get_contents() 函数复制到一个字符串变量中。 想要输出存储在内部缓冲区中的内容,可以使用 ob_end_flush() 函数。另外, 使用 ob_end_clean() 函数会静默丢弃掉缓冲区的内容。
Warning
当有正在调用的回调函数时,一些网络服务器(例如Apache)会改变一个脚本的工作目录。
你可以在回调函数中再把它改回来,例如
chdir(dirname($_SERVER['SCRIPT_FILENAME']))
。
输出缓冲区是可堆叠的,这即意谓着,当有一个 ob_start() 是活跃的时, 你可以调用另一个 ob_start() 。 只要确保又正确调用了 ob_end_flush() 恰当的次数即可。 如果有多重输出回调函数是活跃的,输出内容会一直按嵌套的顺序依次通过它们而被过滤。
参数
output_callback
可选参数
output_callback
函数可以被指定。 此函数把一个字符串当作参数并返回一个字符串。 当输出缓冲区被( ob_flush(), ob_clean() 或者相似的函数)冲刷(送出)或者被清洗的时候;或者在请求结束之际输出缓冲区内容被冲刷到浏览器的时候该函数将会被调用。 当调用output_callback
时,它将收到输出缓冲区的内容作为参数 并预期返回一个新的输出缓冲区作为结果,这个新返回的输出缓冲区内容将被送到浏览器。 如果这个output_callback
不是一个可以调用的函数,此函数 会返回false
。以下是回调签名:handler ( string
$buffer
[, int$phase
] ) : stringbuffer
- 输出缓冲区中的内容。
phase
-
比特掩码
PHP_OUTPUT_HANDLER_*
常量。
如果
output_callback
返回false
,其原来的输入 内容被直接送到浏览器。这个参数
output_callback
可以通过直接给一个null
值而避开。ob_end_clean(), ob_end_flush(), ob_clean(), ob_flush() 和 ob_start() 不能从一个回调函数中调用。 如果从回调函数中调用了它们,产生的行为是不明确的。 如果想要删除缓冲区的内容,从回调函数中返回一个"" (空字符串)。 更不能从一个回调函数中使用像
print_r($expression, true)
或highlight_file($filename, true)
一样的输出缓冲函数。Note:
ob_gzhandler() function exists to facilitate sending gz-encoded data to web browsers that support compressed web pages. ob_gzhandler() determines what type of content encoding the browser will accept and will return its output accordingly.
chunk_size
如果可选参数
chunk_size
被赋值了,在任何一个能引起缓冲区的长度等于 或超过chunk_size
的输出操作后,缓冲区都会被刷送。 默认值0
意味着函数仅在最后被调用。PHP 5.4.0 之前,
1
是一个特殊情况下的值,代表将 chunk_size 设置为 4096 字节。flags
flags
参数代表了一个掩码位,用来控制对缓冲区的操作。 The default is to allow output buffers to be cleaned, flushed and removed, which can be set explicitly viaPHP_OUTPUT_HANDLER_CLEANABLE
|PHP_OUTPUT_HANDLER_FLUSHABLE
|PHP_OUTPUT_HANDLER_REMOVABLE
, orPHP_OUTPUT_HANDLER_STDFLAGS
as shorthand.每个标志都控制着对一组功能的访问,详细介绍如下:
Constant Functions PHP_OUTPUT_HANDLER_CLEANABLE
ob_clean(), PHP_OUTPUT_HANDLER_FLUSHABLE
ob_end_flush(), PHP_OUTPUT_HANDLER_REMOVABLE
ob_end_clean(),
返回值
成功时返回 true
, 或者在失败时返回 false
。
范例
Example #1 用户自定义回调函数的例子
<?phpfunction callback($buffer){ // replace all the apples with oranges return (str_replace("apples", "oranges", $buffer));}ob_start("callback");?><html><body><p>It's like comparing apples to oranges.</p></body></html><?phpob_end_flush();?>
以上例程会输出:
<html> <body> <p>It's like comparing oranges to oranges.</p> </body> </html>
Example #2 以兼容 PHP 5.3 和 5.4 的方式创建一个不可擦除的输出缓冲区
<?phpif (version_compare(PHP_VERSION, '5.4.0', '>=')) { ob_start(null, 0, PHP_OUTPUT_HANDLER_STDFLAGS ^ PHP_OUTPUT_HANDLER_REMOVABLE);} else { ob_start(null, 0, false);}?>
参见
- ob_get_contents() - 返回输出缓冲区的内容
- ob_end_clean() - 清空(擦除)缓冲区并关闭输出缓冲
- ob_end_flush() - 冲刷出(送出)输出缓冲区内容并关闭缓冲
- ob_implicit_flush() - 打开/关闭绝对刷送
- ob_gzhandler() - 在ob_start中使用的用来压缩输出缓冲区中内容的回调函数。ob_start callback function to gzip output buffer
- ob_iconv_handler() - 以输出缓冲处理程序转换字符编码
- mb_output_handler() - 在输出缓冲中转换字符编码的回调函数
- ob_tidyhandler() - ob_start callback function to repair the buffer