栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在PHP中禁用输出缓冲

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在PHP中禁用输出缓冲

tl; dr版本

做两件事:

  1. 禁用用户空间输出缓冲区,或者…

    • 在全球范围内,通过…

    • output_buffering
      在您的php.ini中关闭,或

    • output_buffering
      使用以下命令在Apache配置中关闭

       php_flag "output_buffering" Off
    • 或仅针对您关心的脚本,通过以下任一方式…

    • 致电

      ob_end_flush()
      ,或

    • 呼唤
      ob_end_clean()
    • 另外,通过以下任一方法,尽可能禁用服务器级别的输出缓冲区:

    • ob_implicit_flush()
      在脚本的开头调用,或者

    • flush()
      在每个
      echo
      将输出添加到响应主体的语句或其他语句之后调用

较长的版本

令人困惑的是,可能存在两个相关的缓冲层,PHP文档在区分这两个方面做得很差。

输出缓冲区

PHP文档通常将第一层称为“输出缓冲区”。此缓冲层仅影响到HTTP响应 正文
的输出,而不影响标头。您可以使用打开缓冲输出

ob_start()
ob_end_flush()
或者使用或将其关闭
ob_end_clean()
。您还可以使用
output_buffering
php.ini中的选项使所有脚本自动从输出缓冲开始。

对于生产版本的php.ini,此选项的默认值为4096,这意味着将在输出缓冲区中缓冲输出的前4096个字节,这时将对其进行刷新并关闭输出缓冲。

您可以通过在php.ini文件中将设置

output_buffering
Off
(或使用

php_flag "output_buffering" Off

如果您使用的是Apache,请在Apache配置中使用。或者,您可以通过调用

ob_end_clean()
ob_end_flush()
在脚本的开头禁用单个脚本的功能。

写缓冲区和Web服务器缓冲区

PHP手册将输出缓冲区之外的内容称为“写缓冲区”,以及Web服务器具有的任何缓冲系统。如果您通过

mod_php
和Apache一起使用PHP和Apache
,而没有使用
mod_gzip
,则可以调用
flush()
来刷新它们;与其他后端一样,它也可能会起作用,尽管该手册对提供保证不屑一顾:

描述

void flush ( void )

刷新PHP的写缓冲区以及PHP使用的任何后端PHP(CGI,Web服务器等)。这会尝试将当前输出一直推送到浏览器,但有一些警告。

flush()
可能无法覆盖Web服务器的缓冲方案,并且对浏览器中的任何客户端缓冲都没有影响。它也不会影响PHP的用户空间输出缓冲机制。这意味着如果您正在使用ob_flush()和 flush() 来刷新ob输出缓冲区,则必须使用它们。

还有两种方法可以使PHP

flush()
每次您进行
echo
任何操作(或执行将输出回显到响应正文的任何​​其他操作)时自动调用。

首先是打电话

ob_implicit_flush()
。请注意,该函数被欺骗性命名。鉴于其
ob_
前缀,任何理智的人会认为它会影响到“输出缓冲”,因为这样做
ob_start
ob_flush
但是,这种情况并非如此;
ob_implicit_flush()
像一样
flush()
,会影响服务器级别的输出缓冲区,并且不会与其他
ob_
功能控制的输出缓冲区发生任何交互。

第二种是通过在php.ini
中将

implicit_flush
标志设置为来全局启用隐式刷新
On
。这等效于
ob_implicit_flush()
在每个脚本的开头进行调用。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/442983.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号