2012-03-15 34 views
3

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

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

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

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

所有帮助表示感谢!

+1

我想你已阅读http://php.net/manual/en/book.outcontrol.php的所有内容 – 2012-03-15 00:27:22

回答

3

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

然后,当脚本结束时(或者当您拨打ob_end_flush()时),该缓冲区的内容将写入stdout。

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

1

好吧,让我来解释一下这个样子,

只有缓冲体系的用途之一,但我认为这是有点酷。

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

Operating System Start

当你有一个PHP脚本,有这样的水平基础结构,例如你可能会写:建立数据库服务器

连接..选择

数据库: my_database

开始数据查询

数据查询结束(发现:200行)

...

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

对不起,您首先需要在您的php.ini文件中设置implicit_flush为“on”,然后重新启动Apache服务器来看到这一切。您需要通过“ob_start();”打开输出缓冲(简写“ob”),然后在您的代码“echo”语句的任意位置放置输出缓冲(简写“ob”),之后输入“ob_flush();”命令来查看您的脚本实时运行。

后来,它也可用于基于文件的静态内容缓存是这样的:在你的页面开始

  1. 地方ob_start()(或者你想捕捉的内容开始)
  2. 将ob_end_flush()放置在页面的最后(或者您想要捕捉的内容的结尾处);

  3. then $ my_var = ob_get_contents();获取服务器创建并发送到客户端的所有HTML输出到my_var变量,然后按需要使用它。通常它被保存到一个文件,并通过检查文件的最后修改日期,它被用作静态缓冲。

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

1

请访问这个link。我希望你对你的问题有一个清晰的概念。

+0

这并不回答这个问题。如果链接失效,你的回答就毫无意义。 – Eva 2013-08-19 21:51:20

+0

对于测试HTTP压缩可以做[* here *](http://www.whatsmyip.org/http-compression-test/?url=aHR0cDovL3d3dy5zY2hlZHVsZS1hbmFseXRpY3MuY29tL2FuYWx5dGljcy5qcw==) – hyip 2015-04-12 10:50:28

相关问题