ob_start — 打开输出控制缓冲
2012-12-04 10:36
519 查看
bool ob_start ([ callback $output_callback [, int $chunk_size [, bool $erase ]]] )
内部缓冲区的内容可以用 ob_get_contents() 函数复制到一个字符串变量中。 想要输出存储在内部缓冲区中的内容,可以使用 ob_end_flush() 函数。另外, 使用 ob_end_clean() 函数会静默丢弃掉缓冲区的内容。
输出缓冲区是可堆叠的,这即意谓着,当有一个 ob_start() 是活跃的时, 你可以调用另一个 ob_start() 。 只要确保又正确调用了 ob_end_flush() 恰当的次数即可。 如果有多重输出回调函数是活跃的,输出内容会一直按嵌套的顺序依次通过它们而被过滤。
参数
output_callback
可选参数 output_callback 函数可以被指定。 此函数把一个字符串当作参数并返回一个字符串。 此函数在下情况会被调用到:输出缓冲区被( ob_flush(), ob_clean() 或者相似的函数)冲刷(送出)或者被清洗的时候;或者在请求结束之际输出缓冲区内容被冲刷到浏览器时。 当 output_callback 被调用时,它将收到输出缓冲区的内容作为参数 并预期返回一个新的输出缓冲区作为结果,这个新返回的输出缓冲区内容将被送到浏览器。 如果这个 output_callback 不是一个可以调用的函数,此函数
会返回 FALSE 。
如果回调函数有两个参数,第二个参数会由一个位域补充,该位域由 PHP_OUTPUT_HANDLER_START, PHP_OUTPUT_HANDLER_CONT 和 PHP_OUTPUT_HANDLER_END 组成。
如果 output_callback 返回 FALSE ,其原来的输入 内容被直接送到浏览器。
这个参数 output_callback 可以通过直接给一个 NULL 值而避开。
ob_end_clean(), ob_end_flush(), ob_clean(), ob_flush() and ob_start() 不能从一个回调函数中调用。 如果从回调函数中调用了它们,产生的行为是不明确的。 如果想要删除缓冲区的内容,从回调函数中返回一个"" (空字符串)。 更不能从一个回调函数中使用像print_r($expression, true) 或highlight_file($filename, true) 一样的输出缓冲函数。
chunk_size
如果可选参数 chunk_size 被赋值了,在任何一个能引起缓冲区的长度等于 或超过 chunk_size 的输出操作后,缓冲区都会被刷信。 默认值 0 意味着函数仅在最后被调用,其余的特殊值可以将 chunk_size 从 1 设定到 4096。
erase
如果可选参数 erase 被赋成 FALSE,直到脚本执行完成缓冲区才被删除。 这使得,如果调用了冲刷和清洗(清除)函数,会抛出一个“notice”,并返回 FALSE 值。
例:
ob_start嵌套使用
运行结果如下:
test.php
It’s like comparing apples to oranges.
}}}}}}}}
内部缓冲区的内容可以用 ob_get_contents() 函数复制到一个字符串变量中。 想要输出存储在内部缓冲区中的内容,可以使用 ob_end_flush() 函数。另外, 使用 ob_end_clean() 函数会静默丢弃掉缓冲区的内容。
输出缓冲区是可堆叠的,这即意谓着,当有一个 ob_start() 是活跃的时, 你可以调用另一个 ob_start() 。 只要确保又正确调用了 ob_end_flush() 恰当的次数即可。 如果有多重输出回调函数是活跃的,输出内容会一直按嵌套的顺序依次通过它们而被过滤。
参数
output_callback
可选参数 output_callback 函数可以被指定。 此函数把一个字符串当作参数并返回一个字符串。 此函数在下情况会被调用到:输出缓冲区被( ob_flush(), ob_clean() 或者相似的函数)冲刷(送出)或者被清洗的时候;或者在请求结束之际输出缓冲区内容被冲刷到浏览器时。 当 output_callback 被调用时,它将收到输出缓冲区的内容作为参数 并预期返回一个新的输出缓冲区作为结果,这个新返回的输出缓冲区内容将被送到浏览器。 如果这个 output_callback 不是一个可以调用的函数,此函数
会返回 FALSE 。
如果回调函数有两个参数,第二个参数会由一个位域补充,该位域由 PHP_OUTPUT_HANDLER_START, PHP_OUTPUT_HANDLER_CONT 和 PHP_OUTPUT_HANDLER_END 组成。
如果 output_callback 返回 FALSE ,其原来的输入 内容被直接送到浏览器。
这个参数 output_callback 可以通过直接给一个 NULL 值而避开。
ob_end_clean(), ob_end_flush(), ob_clean(), ob_flush() and ob_start() 不能从一个回调函数中调用。 如果从回调函数中调用了它们,产生的行为是不明确的。 如果想要删除缓冲区的内容,从回调函数中返回一个"" (空字符串)。 更不能从一个回调函数中使用像print_r($expression, true) 或highlight_file($filename, true) 一样的输出缓冲函数。
chunk_size
如果可选参数 chunk_size 被赋值了,在任何一个能引起缓冲区的长度等于 或超过 chunk_size 的输出操作后,缓冲区都会被刷信。 默认值 0 意味着函数仅在最后被调用,其余的特殊值可以将 chunk_size 从 1 设定到 4096。
erase
如果可选参数 erase 被赋成 FALSE,直到脚本执行完成缓冲区才被删除。 这使得,如果调用了冲刷和清洗(清除)函数,会抛出一个“notice”,并返回 FALSE 值。
例:
<?php function 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> <?php ob_end_flush(); ?>
ob_start嵌套使用
<?php ob_start(); ?> It’s like comparing apples to oranges. <? ob_start(); print(“}}}}}}}}”); $str2 = ob_get_contents(); ob_end_clean(); ?> <?php $str1 = ob_get_contents(); ob_end_clean(); var_dump($str1); var_dump($str2); ?>
运行结果如下:
test.php
It’s like comparing apples to oranges.
}}}}}}}}
相关文章推荐
- PHP之输出控制 ob_start(),ob_get_contents(),ob_end_clean()
- PHP输出缓存控制详解 ob_start,flush,ob_flush
- 关于输出缓冲ob_start()的作用
- 使用ob_start缓冲输出做简单缓存
- 用ob_start()控制缓冲,给页面做文件缓存,加速页面
- 用ob_start()控制缓冲,给页面做文件缓存,加速页面
- PHP之ob_start()控制缓冲生成html
- PHP经验——输出缓冲区处理函数:ob_start、ob_get_contents、ob_end_clean、ob_end_flush
- 转开源中国的php ob_start()、ob_end_flush和ob_end_clean()多级缓冲
- 在开源中国上找到的,php ob_start()、ob_end_flush和ob_end_clean()多级缓冲不错的讲解
- ob_start-什么是输出缓冲区-php哪些函数使用前不能有输出
- PHP输出缓冲控制
- php中 ob_start等函数截取标准输出的方法
- 用PHP的ob_start();控制您的浏览器cache!
- 用php的ob_start()控制浏览器cache
- PHP输出缓冲控制函数及参数示例
- 用PHP的ob_start() 控制您的浏览器cache
- 缓冲函数ob_get_contents() ob_end_clean() ob_start()的用法
- 再说php输出缓冲控制那些事