大家在使用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信息保存下来,这在以前恐怕没有办法办到!其实上面就是将一些“过程”转化为“函数”的方法!
相关推荐
PHP缓存实现原理主要涉及到的是PHP的输出控制(Output Control)机制,这是一组用于管理脚本输出的函数,能够让我们在数据实际被输出到浏览器之前对其进行处理。这些功能对于优化网页性能,尤其是在动态网站中生成...
这里,`ob_flush()`的作用是将PHP缓冲区中的内容推送到服务器的输出缓冲区,但不会清除PHP缓冲区,因此需要在`flush()`之前调用,确保数据已准备好被发送。 如果不想频繁使用这些函数,可以在php.ini中调整`output_...
因此,为了实现每秒输出一个数字,需要在`flush()`之前调用`ob_flush()`,因为`flush()`仅负责发送已经从缓冲区释放的数据。 关于`ob_implicit_flush(true)`,这个函数的作用是开启自动刷新模式,使得每次有输出时...
2. PHP 中对缓冲区的控制实现代码 3. PHP5.0 TIDY_PARSE_FILE 缓冲区溢出漏洞的解决方案 4. PHP 中的 buffer 缓冲区用法分析 5. PHP `flush` 类输出缓冲剖析 6. PHP 输出缓冲控制(Output Control)详解 7. PHP 缓冲...
3. **优化代码结构**:可以进一步优化代码结构,例如将重复的JavaScript代码提取成单独的函数或使用PHP的输出缓冲区控制来减少重复代码。 4. **使用预编译查询**:最安全的方式是使用预编译查询(如PDO或MySQLi扩展...
本文介绍了一个PHP文件缓存类的实现代码。在PHP开发中,缓存是优化应用性能的重要技术手段。缓存可以减少数据库的查询次数,减少网络请求延迟,提高页面加载速度等。在PHP中缓存可以大致分为三类:数据库缓存、文件...
- 在这段代码中,`ob_start();`用于开启输出缓冲。这意味着原本应立即发送到客户端的输出数据会被暂时存储起来,直到`ob_end_flush();`被调用才会发送。 - `header("location:index.php");`用于设置HTTP头信息,将...
在PHP编程中,`ob_start()`函数是一个非常重要的功能,它用于开启输出缓冲区,允许开发者在发送数据到浏览器之前对其进行处理。这在处理页面重定向、设置HTTP头信息(如`header()`函数)以及生成HTML静态文件时尤为...
当`output_buffering`开启时,即使代码中没有使用`ob`函数,PHP也会使用缓冲区来积累输出内容,直到达到缓冲区的最大限制或脚本执行结束。这样,CPU可以迅速将生成的数据放入缓冲区,而不需要立即通过网络发送,从而...
- `ob_start()`:开启输出缓冲区,所有输出的内容会被暂存,直到调用`ob_get_flush()`获取并清除缓冲区内容。 - `$make_html`:一个标志变量,用于控制是否生成HTML文件。 - `$go_html`:另一个标志变量,用于...
在实例代码中,`ob_end_flush()` 被用来发送缓冲区内容并结束缓冲区。 3. **ob_get_clean() 函数** `ob_get_clean()` 是一个组合函数,它首先获取当前缓冲区的内容,然后清除缓冲区并返回内容。在示例中,这个函数...
- **获取缓冲区数据并将其写入静态页面中**:使用 `file_put_contents()` 和 `ob_get_clean()` 将输出缓冲中的内容保存到文件。 **3. 伪静态化实现** 接着实现伪静态化的页面。 - **用户信息检索页面**: - 创建...
上述代码中,`ob_start()`函数用于创建一个新的PHP缓存。`ob_flush()`函数则负责将当前缓存中的数据写入到上级缓存(这里是Apache缓存),而`flush()`函数则用于将Apache缓存中的数据发送到浏览器。通过这种方式,...
该函数通常用于实现输出缓冲区的控制和处理。在本代码中,ob_start()函数用于将新闻列表的输出缓冲区保存到内存中,以便后续处理。 二、callback_CreateShtml()函数 callback_CreateShtml()函数是ob_start()函数的...
- **缓存机制**:PHP的缓存功能能加速数据传输,通过缓冲区提高性能。 - **系统升级性能**:PHP具备可扩展性,能自动处理错误并重启,确保服务稳定性。 2. PHP架构 - PHP框架是开发的基础,它保护XML Web ...
在上述示例中,关闭缓冲区后,使用`flush()`函数将输出发送到浏览器,实现每秒输出一个数字的效果。 2. 自主控制缓冲:可以使用`ob_flush()`和`flush()`组合来刷新和发送缓冲区内容。`ob_flush()`清空缓冲区,但不...
在上面的PHP代码中,数据流控制主要通过输出缓冲函数ob_start()和ob_get_contents()来实现。ob_start()会开启一个输出缓冲区,这样任何直接输出到浏览器的数据都会被暂存。当调用ob_get_contents()时,就会返回当前...