【问题标题】:What do ob_start and ob_gzhandler functions really doob_start 和 ob_gzhandler 函数的真正作用是什么
【发布时间】:2012-03-15 00:25:48
【问题描述】:

我知道 ob_start 打开了输出缓冲,但我不完全理解它的含义。对我来说,这意味着它只是停止输出脚本数据。

这是真的吗?这种情况下浏览器是怎么输出数据的,到底要不要用ob_end_flush()关掉?

既然 ob_gzhandler 会压缩网页,那么浏览器是如何处理这些网页的呢?

在代码中看到过ob_start("gzhandler"),既然ob_gzhandler是压缩网页的,那么ob_start("gzhandler")是什么意思,对这两个函数有什么作用呢?

感谢所有帮助!

【问题讨论】:

标签: php ob-start


【解决方案1】:

输出缓冲意味着不是将输出直接写入标准输出流,而是写入缓冲区。

然后当脚本完成时(或当您调用ob_end_flush()),该缓冲区的内容被写入标准输出。

使用ob_gzhandler 会在将缓冲区的内容写入标准输出之前对其进行转换,以便对其进行gzip 压缩。 (支持 gzip 压缩的浏览器会在另一端将其反转,解压缩内容。)

【讨论】:

    【解决方案2】:

    好吧,让我这样解释,

    这只是缓冲系统的一种用途,但我觉得它有点酷。

    首先我想让你看看这个动画。

    Operating System Start

    当你的 php 脚本具有这样的基于级别的结构时,例如,你可以编写:

    与数据库服务器建立连接..

    已选择数据库:my_database

    数据查询开始

    数据查询结束(找到:200 行)

    ...

    等等。但是如果你不使用输出缓冲和刷新,当你的所有脚本执行结束时你会看到这些行。但是,当想法是“我想看看我的脚本什么时候在做什么!”时,你首先需要......

    抱歉,您首先需要在您的 php.ini 文件中将implicit_flush 设置为“on”,然后重新启动您的 apache 服务器以查看所有这些。

    其次,您需要通过“ob_start();”打开输出缓冲(简写“ob”),然后, 将代码“echo”语句放在任何地方,然后放在“ob_flush();”之后命令来查看您的脚本实时运行。

    后来,它也用于基于文件的静态内容缓冲,如下所示:

    1. 将 ob_start() 放在页面的开头(或要捕获的内容的开头)

    2. 将 ob_end_flush() 放在页面末尾(或您要捕获的内容的末尾);

    3. 然后 $my_var = ob_get_contents();将服务器创建并发送到客户端的所有 HTML 输出放入 my_var 变量中,然后根据需要使用它。大多数情况下它被保存到一个文件中,并通过检查文件的最后修改日期,它被用作静态缓冲。

    我希望我能点亮你心中的一些灯泡。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-01
      • 1970-01-01
      • 2017-08-29
      相关资源
      最近更新 更多