3

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

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

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

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

所有帮助表示赞赏!

4

2 回答 2

4

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

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

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

于 2012-03-15T00:30:06.403 回答
1

好吧,让我这样解释,

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

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

操作系统启动

例如,当您的 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 变量中,然后根据需要使用它。大多数情况下,它被保存到一个文件中,并通过检查文件的最后修改日期,它被用作静态缓冲。

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

于 2012-03-15T00:57:16.323 回答