`

PHP中对缓冲区的控制实现代码

阅读更多

大家在使用PHP的过程中不免要使用到header和setcookie两个函数,这两个函数会发送一段文件头信息给浏览器,但是如果在使用这两个函数之前已经有了任何输出(包括空输出,比如空格,回车和换行)就会提示出错,提示信息如下:“Header had all ready send by”!那有什么方法可以在有了输出的情况下面在发送文件头信息呢?在PHP 4.0里面加入了缓冲区控制的几个函数,使用这些函数可以帮我们解决很多问题。

一、 相关函数简介:

1、Flush:输出缓冲区内的内容并且删除缓冲区。

函数格式:flush()

说明:这个函数经常使用,效率很高。

2、ob_start :打开输出缓冲区

函数格式:void ob_start(void)

说明:当缓冲区激活时,所有来自PHP程序的非文件头信息均不会发送,而是保存在内部缓冲区。为了输出缓冲区的内容,可以使用ob_end_flush()或者使用ob_end_clean()来输出缓冲区的内容。

3 、ob_get_contents :返回内部缓冲区的内容。

使用方法:string ob_get_contents(void)

说明:这个函数会返回当前缓冲区中的内容,如果输出缓冲区没有激活,则返回 FALSE 。

4、ob_get_length:返回内部缓冲区的长度。

使用方法:int ob_get_length(void)

说明:这个函数会返回当前缓冲区中的长度;和ob_get_contents一样,如果输出缓冲区没有激活。则返回 FALSE。

5、ob_end_flush :发送内部缓冲区的内容到浏览器,并且关闭输出缓冲区。

使用方法:void ob_end_flush(void)

说明:这个函数发送输出缓冲区的内容(如果有的话)。

6、ob_end_clean:删除内部缓冲区的内容,并且关闭内部缓冲区

使用方法:void ob_end_clean(void)

说明:这个函数不会输出内部缓冲区的内容!

7、ob_implicit_flush:打开或关闭绝对刷新

使用方法:void ob_implicit_flush ([int flag])

说明:使用过Perl的人都知道?$|=x的意义,这个字符串可以打开/关闭缓冲区,而ob_implicit_flush函数也和那个一样,默认为关闭缓冲区,打开绝对输出。

二、使用例子:

在一开始,笔者说了用缓冲区控制的函数可以防止文件头发送信息出错,下面就是一个例子:

 

.代码如下:

<? //PHP提示符
ob_start(); //打开缓冲区
echo "Hello/n"; //输出
header('location:gotourl.php'); //把浏览器重定向到gotourl.php
?>

 

如果去掉ob_start,PHP就会提示在文件的第4行出错(出错信息如前面所示),但是加上ob_start,就不会提示出错,原因是当打开了缓冲区,echo后面的字符不会输出到浏览器,而是保留在服务器,直到你使用flush或者ob_end_flush才会输出,所以并不会有任何文件头输出的错误!

下面再给出一个很经典的用途:

比如你用<?phpinfo();?>得到服务器和客户端的设置信息,但是这个信息会因为客户端的不同而不同,如果想要保存phpinfo()函数的输出怎么办呢?在没有缓冲区控制之前,可以说一点办法也没有,但是有了缓冲区的控制,我们可以轻松的解决:

 

.代码如下:

<?
ob_start(); //打开缓冲区
phpinfo(); //使用phpinfo函数
?$info=ob_get_contents(); //得到缓冲区的内容并且赋值给?$info
?$file=fopen('info.txt','w'); //打开文件info.txt
fwrite(?$file,?$info); //写入信息到info.txt
fclose(?$file); //关闭文件info.txt
?>

 


用以上的方法,就可以把不同用户的phpinfo信息保存下来,这在以前恐怕没有办法办到!其实上面就是将一些“过程”转化为“函数”的方法!


另:验证码生成的图像,在将图像输出到浏览器里,要清除下缓存区
        //清除缓存区
        ob_clean();
        //设置文件头; 
        Header("Content-type: image/PNG");

        //以PNG格式将图像输出到浏览器或文件;
        ImagePNG($distortion_im);

        //销毁一图像,释放与image关联的内存;
        ImageDestroy($distortion_im);
        ImageDestroy($im);

 

来源:http://www.poluoluo.com/jzxy/201309/243650.html

分享到:
评论

相关推荐

    php缓存实现原理

    PHP缓存实现原理主要涉及到的是PHP的输出控制(Output Control)机制,这是一组用于管理脚本输出的函数,能够让我们在数据实际被输出到浏览器之前对其进行处理。这些功能对于优化网页性能,尤其是在动态网站中生成...

    PHP缓冲区用法总结

    这里,`ob_flush()`的作用是将PHP缓冲区中的内容推送到服务器的输出缓冲区,但不会清除PHP缓冲区,因此需要在`flush()`之前调用,确保数据已准备好被发送。 如果不想频繁使用这些函数,可以在php.ini中调整`output_...

    剖析 PHP 中的输出缓冲

    因此,为了实现每秒输出一个数字,需要在`flush()`之前调用`ob_flush()`,因为`flush()`仅负责发送已经从缓冲区释放的数据。 关于`ob_implicit_flush(true)`,这个函数的作用是开启自动刷新模式,使得每次有输出时...

    刷新PHP缓冲区为你的站点加速

    2. PHP 中对缓冲区的控制实现代码 3. PHP5.0 TIDY_PARSE_FILE 缓冲区溢出漏洞的解决方案 4. PHP 中的 buffer 缓冲区用法分析 5. PHP `flush` 类输出缓冲剖析 6. PHP 输出缓冲控制(Output Control)详解 7. PHP 缓冲...

    PHP通用防注入安全代码-修改可用

    3. **优化代码结构**:可以进一步优化代码结构,例如将重复的JavaScript代码提取成单独的函数或使用PHP的输出缓冲区控制来减少重复代码。 4. **使用预编译查询**:最安全的方式是使用预编译查询(如PDO或MySQLi扩展...

    PHP文件缓存类实现代码

    本文介绍了一个PHP文件缓存类的实现代码。在PHP开发中,缓存是优化应用性能的重要技术手段。缓存可以减少数据库的查询次数,减少网络请求延迟,提高页面加载速度等。在PHP中缓存可以大致分为三类:数据库缓存、文件...

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

    - 在这段代码中,`ob_start();`用于开启输出缓冲。这意味着原本应立即发送到客户端的输出数据会被暂时存储起来,直到`ob_end_flush();`被调用才会发送。 - `header("location:index.php");`用于设置HTTP头信息,将...

    用PHP ob_start()控制浏览器cache、生成html实现代码

    在PHP编程中,`ob_start()`函数是一个非常重要的功能,它用于开启输出缓冲区,允许开发者在发送数据到浏览器之前对其进行处理。这在处理页面重定向、设置HTTP头信息(如`header()`函数)以及生成HTML静态文件时尤为...

    php中ob函数缓冲机制深入理解

    当`output_buffering`开启时,即使代码中没有使用`ob`函数,PHP也会使用缓冲区来积累输出内容,直到达到缓冲区的最大限制或脚本执行结束。这样,CPU可以迅速将生成的数据放入缓冲区,而不需要立即通过网络发送,从而...

    PHP动态网页实现静态HTML技术的方法实现

    - `ob_start()`:开启输出缓冲区,所有输出的内容会被暂存,直到调用`ob_get_flush()`获取并清除缓冲区内容。 - `$make_html`:一个标志变量,用于控制是否生成HTML文件。 - `$go_html`:另一个标志变量,用于...

    php缓冲输出实例分析

    在实例代码中,`ob_end_flush()` 被用来发送缓冲区内容并结束缓冲区。 3. **ob_get_clean() 函数** `ob_get_clean()` 是一个组合函数,它首先获取当前缓冲区的内容,然后清除缓冲区并返回内容。在示例中,这个函数...

    php实现页面静态化

    - **获取缓冲区数据并将其写入静态页面中**:使用 `file_put_contents()` 和 `ob_get_clean()` 将输出缓冲中的内容保存到文件。 **3. 伪静态化实现** 接着实现伪静态化的页面。 - **用户信息检索页面**: - 创建...

    PHP 缓存详情机制

    上述代码中,`ob_start()`函数用于创建一个新的PHP缓存。`ob_flush()`函数则负责将当前缓存中的数据写入到上级缓存(这里是Apache缓存),而`flush()`函数则用于将Apache缓存中的数据发送到浏览器。通过这种方式,...

    PHP静态新闻列表自动生成代码

    该函数通常用于实现输出缓冲区的控制和处理。在本代码中,ob_start()函数用于将新闻列表的输出缓冲区保存到内存中,以便后续处理。 二、callback_CreateShtml()函数 callback_CreateShtml()函数是ob_start()函数的...

    基于PHP的电商网站的设计与实现.docx

    - **缓存机制**:PHP的缓存功能能加速数据传输,通过缓冲区提高性能。 - **系统升级性能**:PHP具备可扩展性,能自动处理错误并重启,确保服务稳定性。 2. PHP架构 - PHP框架是开发的基础,它保护XML Web ...

    php 输出缓冲 Output Control用法实例详解

    在上述示例中,关闭缓冲区后,使用`flush()`函数将输出发送到浏览器,实现每秒输出一个数字的效果。 2. 自主控制缓冲:可以使用`ob_flush()`和`flush()`组合来刷新和发送缓冲区内容。`ob_flush()`清空缓冲区,但不...

    PHP 抓取网页图片并且另存为的实现代码

    在上面的PHP代码中,数据流控制主要通过输出缓冲函数ob_start()和ob_get_contents()来实现。ob_start()会开启一个输出缓冲区,这样任何直接输出到浏览器的数据都会被暂存。当调用ob_get_contents()时,就会返回当前...

Global site tag (gtag.js) - Google Analytics