ob_start和ob_gzhandler函数真正做了什么

时间:2012-03-15 00:25:49

标签: php ob-start

我知道ob_start会打开输出缓冲,但我不完全明白这意味着什么。对我而言,这意味着它只是停止输出脚本数据。

这是真的吗?在这种情况下浏览器如何输出数据,我是否必须使用ob_end_flush()将其关闭?

由于ob_gzhandler压缩网页,浏览器如何处理这些网页?

我在代码中看过ob_start(“gzhandler”),因为ob_gzhandler压缩网页,ob_start(“gzhandler”)是什么意思,它是如何应用于这两个函数的?

所有帮助表示赞赏!

2 个答案:

答案 0 :(得分:3)

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

然后当脚本完成时(或当你调用ob_end_flush()时),该缓冲区的内容将被写入stdout。

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

答案 1 :(得分:1)

好的,让我解释一下这个,

这只是缓冲系统的一个用途,但我认为它有点酷。

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

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();获取服务器创建并将客户端发送到my_var变量的所有HTML输出,然后根据需要使用它。它主要保存到文件中,通过检查文件的最后修改日期,它被用作静态缓冲。

  4. 我希望我能点亮一些灯泡。