「PHP」- 输出控制

  CREATED BY JENKINSBOT

内容:介绍“输出控制”函数库;参考官方文档,附加一些辅助说明和解释;

介绍

http://php.net/manual/en/intro.outcontrol.php

当PHP脚本有输出时,输出“控制函数”可以用这些来控制输出。
这在多种不同情况中非常有用,尤其是用来在脚本开始输出 数据后,发送http头信息到浏览器。
比如说:我已经echo了一些东西,结果由于异常要返回404之类的,那应该取消之前的echo,这是就可以使用 输出控制函数库;

**: 输出控制函数不影响由 header() 或 setcookie()发送的文件头信息,仅影响 echo这样的函数和PHP代码块间的数据。

该函数库属于 PHP核心函数库,不需要安装扩展:)

运行环境配置

http://php.net/manual/en/outcontrol.configuration.php

output_buffering = boolean/integer

默认值为 0 或者 Off 一个意思。On表示在所有的脚本中使用控制输出。
PHP-CLI 中默认为Off,因为在PHP-CLI不需要进行输出控制,准确说是没什么意义;
如果参数为一个整数,表示 buffer 的最大大小,单位为字节。超过的数据会舍弃,但也不正好是你设置的值,官方文档里用了一个单词“roughly”;
生产环境中的 php.ini 中,output_buffer = 4096,官方给的说法是出行性能原因;

output_handler = string

PHP 4.0.4+
默认为空;
该选项可将脚本所有的输出,重定向到一个函数。
例如,将 output_handler 设置为 mb_output_handler() 时,字符的编码将被修改为指定的编码。设置的任何处理函数,将自动的启用 output buffering。

	* 不能同时使用 mb_output_handler() 和 ob_iconv_handler(),也不能同时使用 ob_gzhandler() 和 zlib.output_compression。
	* 只有“内置函数”可以使用此指令。对于“用户定义的函数”,使用 ob_start() 的第一个参数。

implicit_flush = boolean

默认为 FALSE;CLI SAPI 中为 TRUE;
如将该选项改为 TRUE,PHP 将使输出层,在每段信息块输出后,自动刷新。意思就是说每次使用 print()、echo() 等函数在每个 HTML 块之后,调用 PHP 中的 flush() 函数。

在Web环境中使用这个函数,对性能有很大的影响,只建议在 debug 的时候使用;

url_rewriter.tags = string

指定被 output_add_rewrite_var() 重写的HTML标签(已GET方式存在,就是参数直接拼接在URL后面);
默认值是:

  • “a=href,area=href,frame=src,form=,fieldset=”;具体的值也可能有出入,因为PHP官方手册的描述和php.ini里描述的默认值不同,毕竟PHP有时候也是一个含糊的语言;
  • form是一个特殊标签。会在form中插入 <input hidden=”session_id” name=”session_name”> 做为form的变量,
我猜是因为 form 有 method 属性的(比如GET、POST、PUT …)直接拼接不合适;
  • PHP 7.1.0 开始, fieldset 不再被当作techie标签;我是第一次听说这个标签;

PHP 7.1.0之前, url_rewriter.tags 被用来指定 session.trans_sid_tags。
PHP 7.1.0开始, 只被 output_add_rewrite_var() 使用;

url_rewriter.hosts = string

指定被 output_add_rewrite_var() 重写的主机名,就像 url_rewriter.tags 一样;
默认值为$_SERVER[‘HTTP_HOST’]。支持多个主机名,多主机名之间用 ‘,’分隔(php.net,wiki.php.net,bugs.php.net)。不允许有空格存在。

预定义常量

http://php.net/manual/en/outcontrol.constants.php#outcontrol.constants

输出控制相关函数

void flush ( void ) ——————————————————— 刷新缓冲;

void ob_clean ( void ) ————————————————— 清空缓冲区;

bool ob_end_clean ( void ) ——————————————- 清空缓冲区,然后关闭缓冲区;

bool ob_end_flush ( void ) ——————————————– 输出缓冲区的内容,然后关闭缓冲区;

void ob_flush ( void ) —————————————————- 输出缓冲区的内容,然后清空缓冲区;

string ob_get_clean ( void ) —————————————— 获取缓冲区的内容,然后清空缓冲区;相当于 ob_get_contents() + ob_end_clean()。

string ob_get_contents ( void ) ————————————- 获取缓冲区内的内容;

string ob_get_flush ( void ) ——————————————- 输出缓冲区的内容,返回缓冲区的内容,然后关闭缓冲区;

int ob_get_length ( void ) ———————————————- 获取缓冲区内容的长度;

int ob_get_level ( void ) ————————————————- 返回缓冲机制的嵌套级别;当调用 多次 ob_start() 时,嵌套级别是不断累加的。

——- 未调用ob_start()时,如果返回值为1,表示 “output_buffering” 已开启;

array ob_get_status ([ bool $full_status = FALSE ] ) —- 返回缓冲区的状态;

string ob_gzhandler ( string $buffer , int $mode ) ——– 在ob_start中使用的用来压缩输出缓冲区中内容的回调函数;

void ob_implicit_flush ([ int $flag = true ] ) —————— 启用 implicit_flush;

array ob_list_handlers ( void ) ————————————— 列出所有使用中的输出处理程序;

bool ob_start ([ callback $output_callback [, int $chunk_size [, bool $erase ]]] )

——- 打开输出控制缓冲;

bool output_add_rewrite_var ( string $name , string $value )

——- 添加URL重写器的值;

bool output_reset_rewrite_vars ( void ) ——- 此函数重置URL重写器,移除所有的先前由 output_add_rewrite_var() 函数设置的重写变量;