`
sdustyongz
  • 浏览: 89649 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

PHP ob_start() 函数介绍

    博客分类:
  • php
阅读更多
php ob_start 与 ob_end_flush() 是 php 的缓冲输出函数。

ob_start([string output_callback])- 打开输出缓冲区,所有的输出信息不在直接发送到浏览器,而是保存在输出缓冲区里面,可选得回调函数用于处理输出结果信息。

ob_end_flush – 结束(发送)输出缓冲区的内容,关闭输出缓冲区。

php 输出东西,会保存在一个 php 维护的内存里,称为 buffer 也行,缓存也行,都是一个意思。然后当这个 buffer 满了,

php 会自动往 web server 发送这些数据。

也就是说每次 echo,并不一定会输出东西,而是保存在 buffer 里。

ob_start() 的意思,可以理解为(但是实际上和我下面的说法有区别),这个 buffer 由 ob_ 系列函数来来控制,也就是,

PHP 不会维护自己的 buffer,不会自动把buffer 的内容自动发送到 web server,直到你 ob_end() 或者类似的 ob 操作。

ob_函数一般用来捕获当前的输出,跟效率是没什么关系的。至于为什么捕获输出,原因很多,例如我捕捉输出,缓存到一个文件里,下次请求就可以直接读这个 cache 文件的内容作为输出了。
ob_start();
内容
echo ob_get_contents() ;

就是类似上面这样的代码了,说白了没有任何意义的代码。

我仔细想过之后,然后上网搜索了一下,发现相当多的初学者,并不理解ob的作用,只是网上经常把ob叫做输出缓冲,输出缓存,所以相当多的人就把ob系列函数当作是加快PHP页面显示的工具。

其实ob是output buffering的简称,而不是output cache,ob用对了是能对速度有一定的帮助,但是盲目的加上ob函数,只会增加CPU额外的负担。下面我说说ob的基本作用。

防止在浏览器有输出之后再使用setcookie,或者header,session_start函数造成的错误。 (我本以为最开始说的代码是这样的作用,但后来朋友说不是的),其实这样的用法少用为好,养成良好的代码习惯。

捕捉对一些不可获取的函数的输出,比如phpinfo会输出一大堆的HTML,但是我们无法用一个变量,例如$info=phpinfo();来捕捉,这时候ob就管用了。

对输出的内容进行处理,例如进行gzip压缩,例如进行简繁转换,例如进行一些字符串替换。

生成静态文件,其实就是捕捉整页的输出,然后存成文件,经常在生成HTML,或者整页缓存中使用。

对于刚才说的第三点中的GZIP压缩,可能是很多人想用,却没有真真用上的,其实稍稍修改下代码,就可以实现页面的gzip压缩。

ob_start(ob_gzhandler);
内容

没错,加一个ob_gzhandler这个回调函数就可以了,不过这么做有些小问题,一是需要zlib支持,二是没有判断浏览器是否支持gzip(现在好像都支持,iphone浏览器好像都支持了)。

以前的做法是判断一下浏览器是否支持gzip,然后用第三方的gzip函数来压缩ob_get_contents() 的内容,最后echo。
分享到:
评论

相关推荐

    PHP生成静态页面(ob_start+smarty)生成

    本篇将详细介绍一种基于`ob_start()`和Smarty模板引擎的PHP静态页面生成方法。 1. **输出缓冲控制函数**: `ob_start()`是PHP中用于开启输出缓冲区的函数,它会将程序生成的所有输出存储在内存中,而不是立即发送...

    PHP中ob_start函数的使用说明

    在PHP编程语言中,`ob_start`函数是一个非常重要的输出控制函数,用于开启输出缓冲机制。这个函数允许你在脚本的任何位置输出内容,而不用担心这些输出会影响之前或之后发送的HTTP头部信息,如`header()`函数。这是...

    ob_start(),ob_start(ob_gzhandler)使用

    ob_start()是PHP中的一个输出控制函数,用来启动输出缓冲。当ob_start()函数被激活后,所有的输出,包括HTML标记和文本,都会暂时保存到一个内部的缓冲区中,而不是直接发送到浏览器。使用ob_start()的一个好处是...

    用PHP的ob_start();控制您的浏览器cache!

    ### 使用PHP的`ob_start();`控制浏览器缓存详解 #### 标题及描述解析 本文旨在探讨如何通过PHP中的`ob_start();`函数来控制浏览器缓存,这对于优化网站性能、减少网络流量以及改善用户体验等方面具有重要意义。 ##...

    PHP用法ob_start生成html页面的方法_.docx

    在PHP中,`ob_start()`是一个非常重要的输出控制函数,它用于启动输出缓冲。输出缓冲允许我们在发送HTTP头之前生成HTML内容,这对于某些场景,比如创建静态HTML页面或者处理动态内容的输出顺序,是非常有用的。当`ob...

    关于ob_get_contents(),ob_end_clean(),ob_start(),的具体用法详解

    PHP输出缓冲函数主要包括ob_start(), ob_get_contents(), ob_end_clean(), ob_get_clean()等,这些函数在Web开发中非常有用,能够有效地管理输出的内容,特别是在进行复杂的输出操作或文件传输时。下面将详细介绍...

    php基于ob_start(ob_gzhandler)实现网页压缩功能的方法

    在PHP中,`ob_start()` 和 `ob_gzhandler()` 函数配合使用可以实现网页内容的GZIP压缩,有效地减小了网页的大小。 `ob_start()` 是PHP的输出控制函数,它开启了一个输出缓冲区,允许脚本在实际发送到浏览器之前处理...

    php中 ob_start等函数截取标准输出的方法

    我想将PHP脚本中输出的东西收集在一起,于是使用了ob_start和ob_end_flush这两个函数,确实有达到收集输出内容的作用,但同时也将这些打印到了控制台界面中。我想问的是有没有办法,阻止PHP像控制台输出信息。该软件...

    解析PHP中ob_start()函数的用法

    在PHP编程中,`ob_start()` 是一个非常重要的输出控制函数,它用于开启输出缓冲机制。这个函数的主要作用是将脚本的输出暂时存储在内存中,而不是立即发送到浏览器。这种机制允许开发者在需要的时候对输出进行处理,...

    php缓冲 output_buffering和ob_start使用介绍

    本文将介绍PHP中的output_buffering机制以及ob_start函数的使用,这两个功能都与PHP缓冲技术息息相关。 首先,我们需要理解什么是缓冲。缓冲(buffer)是一块内存区域,用于在不同速度的设备或不同优先级的进程之间...

    用php的ob_start来生成静态页面的方法分析

    `ob_start()`、`ob_end_clean()` 和 `ob_get_contents()` 是PHP的输出控制函数,它们在生成静态页面的过程中起到关键作用。下面将详细解释这三个函数的工作原理以及如何使用它们来生成静态页面。 `ob_start()` 函数...

    php利用ob_start()清除输出和选择性输出的方法

    在PHP编程中,`ob_start()` 是一个非常实用的内置函数,它用于启动输出缓冲。输出缓冲允许程序临时存储输出,而不是直接发送到浏览器。它通常用于处理HTML代码,例如,可以在输出前对其进行修改或清洗,以及用于页面...

    php使用ob_start()实现图片存入变量的方法

    `ob_start()`是PHP的输出控制函数之一,用于开启输出缓冲区。当此函数被调用时,所有输出到浏览器的内容都将被保存在内存中,而不会立即发送到客户端。这为我们提供了一个机会,可以先处理这些内容,然后再决定是否...

    PHP使用ob_start生成html页面的方法

    通过使用ob_start函数,开发者可以暂时性地将脚本的输出存储到一个内部缓冲区中,而不是直接发送到浏览器。这一功能在生成HTML页面时尤为有用。 首先,ob_start函数本身并不复杂。它主要用于打开输出缓冲区,并可选...

Global site tag (gtag.js) - Google Analytics