我知道ob_start会打开输出缓冲,但我不完全明白这意味着什么。对我而言,这意味着它只是停止输出脚本数据。
这是真的吗?在这种情况下浏览器如何输出数据,我是否必须使用ob_end_flush()将其关闭?
由于ob_gzhandler压缩网页,浏览器如何处理这些网页?
我在代码中看过ob_start(“gzhandler”),因为ob_gzhandler压缩网页,ob_start(“gzhandler”)是什么意思,它是如何应用于这两个函数的?
所有帮助表示赞赏!
答案 0 :(得分:3)
输出缓冲意味着不是将输出直接写入stdout流,而是将其写入缓冲区。
然后当脚本完成时(或当你调用ob_end_flush()
时),该缓冲区的内容将被写入stdout。
使用ob_gzhandler
在将其写入stdout之前转换缓冲区的内容,以便对其进行gzip压缩。 (支持gzip压缩的浏览器在另一端将其反转,解压缩内容。)
答案 1 :(得分:1)
好的,让我解释一下这个,
这只是缓冲系统的一个用途,但我认为它有点酷。
首先,我想让你看一下这个动画。
如果你的php脚本具有这样的基于级别的结构,例如你可以写:
建立与数据库服务器的连接..
选择的数据库:my_database
数据查询已开始
数据查询结束(找到:200行)
...
等。但是如果你不使用输出缓冲和刷新,你将在所有脚本执行结束时看到这些行。但是,当想到“我想看看我的剧本在做什么的时候!”时,你首先需要......
很抱歉,首先需要在php.ini文件中将implicit_flush设置为“on”,然后重新启动apache服务器以查看所有这些内容。
第二,你需要通过“ob_start();”打开输出缓冲(简写为“ob”),然后, 将代码放在代码“echo”语句的任何位置,然后放在“ob_flush();”之后用于查看实时运行脚本的命令。
稍后,它也用于基于文件的静态内容缓冲,如下所示:
将ob_end_flush()放在页面的末尾(或您要捕获的内容的结尾);
然后$ my_var = ob_get_contents();获取服务器创建并将客户端发送到my_var变量的所有HTML输出,然后根据需要使用它。它主要保存到文件中,通过检查文件的最后修改日期,它被用作静态缓冲。
我希望我能点亮一些灯泡。