【发布时间】:2015-03-16 05:23:10
【问题描述】:
我不明白这个功能。我阅读了 PHP 手册,但没有得到它。我正在关注登录教程,他们在session_start() 之前的脚本开头使用了此功能。什么是内部缓冲区?
【问题讨论】:
-
手册解释了ob输出缓冲的功能。它没有涉及您何时以及为什么要这样做。这个问题很合理。
标签: php
我不明白这个功能。我阅读了 PHP 手册,但没有得到它。我正在关注登录教程,他们在session_start() 之前的脚本开头使用了此功能。什么是内部缓冲区?
【问题讨论】:
标签: php
它将所有输出存储在缓冲区中,直到它被刷新(例如 ob_flush())。
它有很多用途。
示例 1:如果您正在为需要查找数据的页面生成 HTML,您可以刷新已生成的 HTML,然后进行查找。这样,当您进行数据检索时,您的页面的 HTTP 传输就开始了。然后您继续输出页面的其余部分。通常,在<body> 标记之后是进行刷新的好地方。浏览器更快地获得第一个字节,如果所有 CSS 都包含在 <head> 中,则浏览器可以构建 CSSOM。理想情况下,与将 HTML 传输到浏览器相比,进行数据检索所需的时间更少。这样,数据检索时间对页面加载速度没有影响。
示例 2:
如果要编辑图像。您输出图像,缓冲区成为图像原始数据。
$image = ob_get_contents();
进行编辑。清空输出缓冲区(ob_clean()),然后输出编辑后的带有更多 HTML 的图像。
示例 3:
ob_start 可以通过回调函数调用。
当缓冲区被刷新时,回调函数被 ob_start 调用,输出缓冲区的内容可以被函数处理。
ob_start("ob_gzhandler");
ob_gzhandler 将 gzip 输出。当您的服务器未配置为压缩输出时,这特别方便。一些服务器被配置为压缩文件扩展名而不是内容类型。或者,如果服务器未配置为压缩特定的 MIME 内容类型。
如果你的服务器不压缩 JSON (application/json) 你可以使用 ob_start("ob_gzhandler");
ob_start("ob_gzhandler");
header('Content-Type:application/json; charset=utf-8');
ob_start('ob_tidyhandler');
ob_start('ob_tidyhandler');将整理您的输出。它将添加缺少的 Doctype、<head> 缺少的结束标记等。
【讨论】: