【发布时间】:2017-01-31 14:36:39
【问题描述】:
我想知道 php 中的缓冲。我已经阅读了很多关于此的主题。
How to fix “Headers already sent” error in PHP
Why use output buffering in PHP?
我只阅读了关于优点的信息,没有关于使用缓冲的缺点的信息。
例如
输出缓冲对 Web 开发人员的优势
- 单独打开输出缓冲可以减少下载和渲染 HTML 所需的时间,因为它不会在 PHP 处理 HTML 时被分段发送到浏览器。
- 我们可以用 PHP 字符串做的所有花哨的事情,现在我们可以将整个 HTML 页面作为一个变量来做。
- 如果您在设置 cookie 时遇到消息“警告:无法修改标头信息 - 标头已由(输出)发送”,您会很高兴知道输出缓冲就是您的答案。
如果输出缓冲只提供优势,为什么我应该通过函数 ob_start() 或其他方式手动打开它?
【问题讨论】:
-
你想缓冲你的登录页面吗?
-
@JeroenHeier 我不明白,如果我在整个网站上有栏,我从 DB 中输入用户名,其已登录,首先我必须检查用户是否已登录,所以我必须运行 start_session -> 并检查变量。请定义“登录页面”。 //EDIT 另一方面,如果用户想登录,首先我必须检查他没有登录,所以在 login_page 我应该使用 start_session()
-
缺点:内存占用;缺乏对缓冲区堆栈的控制;可能“丢失”严重错误消息;如果要缓冲输出,请注意代码中的无限循环;如果您的输出不是 text/html(例如文件下载),则存在损坏风险;网站可能看起来反应迟钝; CLI 脚本可能不想缓冲,而是直接显示输出