输出控制
php 脚本有输出的时候, 输出控制函数可用这些来控制输出, 这在多种不清情况中非常有用, 尤其是用来在脚本开始输出数据后,发送 http 头信息到浏览器. 输出控制看书,不影响由 header()或 setcookie()发送的文件头信息, 仅仅影响 echo 这样的函数和 PHP 代码块间的数据
配置
output_buffering int
(默认 “0”)
PHP_INI_PERDIR 如果开启,将在所有脚本中开启缓存输出, 如果控制输出缓冲区的最大值, 可以讲该选项设定为缓存的最大字节数
在 PHP-CLI 模式下,总是 Off
php-cli 简介——不会 shell 语言,一样用 shell!
output_handler string
(默认:Null)
PHP_INI_PERDIR 可将所有的脚本输出,重定向到一个函数,这里设置的函数将自动的处理输出缓冲, 这里填写的只能是内置函数
不能同时使用 mb_output_handler() 和 ob_iconv_handler(),也不能同时使用 ob_gzhandler() 和 zlib.output_compression。
implicit_flush boolean
(默认: 0)
PHP_INI_ALL 默认关闭,开启的时候讲自动输出信息块, 等同于使用 echo()函数后使用 flush()输出
不在 web 中编程的时候, 开启将极大影响性能, cli,sapi 执行下, 默认为 true;
函数
bool ob_start ([ callback $output_callback [, int $chunk_size [, bool $erase ]]] )
缓存输出开始函数,并且可以传递一个函数作为缓冲处理函数
$output_callback 指定输出的函数的名称,该函数可以使用系统自带的 ob_gzhandler, 此函数把一个字符串当作参数并返回一个字符串
$chunk_size 指定大于这个大小之后的每次输出均被指定的缓冲函数处理
$erase 默认为 true, 调用完成后删除缓冲, 如果指定为 false, 则在脚本完成之后删除缓冲
void flush ( void )
刷新输出缓冲, 该函数将当前为止程序的所有输出发送到用户的浏览器
flush() 函数不会对服务器或客户端浏览器的缓存模式产生影响。因此,必须同时使用 ob_flush() 和 flush() 函数来刷新输出缓冲
在 php 5.3.13 中, 默认是开启缓存的, 所以使用 ob_get_level()会获取到 1 的值,同样的是, 直接使用 flush()函数不会输出也是因为会有缓冲
void ob_clean ( void )
清空缓冲区的内容
bool ob_end_clean ( void )
清空并缓冲区内容并关闭这个缓冲区
bool ob_end_flush ( void )
关闭缓存, 并且输出
void ob_flush ( void )
送出缓冲区内容
string ob_get_clean ( void )
获取缓冲区内容并且清除掉缓冲
string ob_get_contents ( void )
获取缓存区内容但是不会清除
string ob_get_flush ( void )
获取缓存区内容并且输出
int ob_get_length ( void )
获取当前缓冲区的长度
等同于 strlen(ob_get_contents())
int ob_get_level ( void )
返回当前缓存的级别
在 php5.3.13 中, 直接执行本函数则返回一个 1 的数值
array ob_get_status ([ bool$full_status = FALSE ] )
获取当前缓冲区的状态,如果指定为 true, 则返回所有缓冲区的状态
获取到的数组
[level] => 1 级别
[type] => 1
PHP_OUTPUT_HANDLER_INTERNAL (0)
PHP_OUTPUT_HANDLER_USER (1)
[status] => 0
PHP_OUTPUT_HANDLER_START (0)
PHP_OUTPUT_HANDLER_CONT (1)
PHP_OUTPUT_HANDLER_END (2)
[name] => default output handler
起作用的缓冲器的名称
[del] => 1
ob_start()设定的清除标志
string ob_gzhandler ( string $buffer , int $mode )
使用 ob_start 调用的默认的处理函数
以方便将 gz 编码的数据发送到支持压缩页面的浏览器
本函数 需要 zlib 扩展
void ob_implicit_flush ([ int $flag = true ] )
打开绝对刷送, 在调用本函数的时候确定关闭了 PHP 自带的缓冲机制,否则等待 PHP 的缓冲区满, 不然不会产生新的输送的.
这里不会调用 flush()函数的也会显示输出值, 和 flush() 函数介绍的有相同的含义
ob_implicit_flush();
ob_end_flush();
$i = 0;
while (true) {
echo 'Now Index is :' . $i++ . '<br>';
sleep(1);
}
array ob_list_handlers ( void )
列出使用中的输出处理程序, php 默认已经开启了缓存
这里返回的将是包含了 ob_gzhandler 和 default output handler 的数组.
ob_start("ob_gzhandler");
echo '<code style="white-space: pre-wrap">';
var_dump(ob_list_handlers());
echo '</code>';
ob_end_flush();
array(2) {
[0]=>
string(22) "default output handler"
[1]=>
string(12) "ob_gzhandler"
}
bool output_add_rewrite_var ( string $name , string $value )
添加 url 重写器的值
这里的 名称 / 值 对 将被以 get 的方式添加到 url 中, 或者添加到 form 中的隐藏域中
当透明 URL 重写用 session.use_trans_sid 开启时同样可以添加到 session ID
要注意,绝对 URL(http://example.com/..)不能被重写。
此函数的行为由 url_rewriter.tags php.ini 参数控制。
bool output_reset_rewrite_vars ( void )
此函数重置 URL 重写器,移除所有的先前由 output_add_rewrite_var()函数设置的重写变量
扩展
说明
创建时间: 2023-01-15 09:27:00 , 最后编辑于 2023-11-24 13:55:00