【问题标题】:Why buffering is not enabled by default in php为什么在 php 中默认不启用缓冲
【发布时间】: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 脚本可能不想缓冲,而是直接显示输出

标签: php buffer


【解决方案1】:

这可能是一个主要基于意见的问题,不应出现在 Stack Overflow 上。

另一方面,我会冒险说,这个问题有一个简短而明确的答案,可能每个人都会同意我的观点。所以,回答你的问题:

这是因为显式总是比隐式好

引用 here 的 Jon Skeet 的话:

一般

  • 隐式:某事正在自动为您完成。

  • 显式:你在源代码中写了一些东西来表明你想要发生的事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-22
    • 1970-01-01
    • 1970-01-01
    • 2019-04-25
    • 2010-11-24
    • 2011-01-10
    相关资源
    最近更新 更多