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


Posted in PHP onJune 24, 2013

ob_get_contents();
ob_end_clean();
ob_start()

使用ob_start()把输出那同输出到缓冲区,而不是到浏览器。
然后用ob_get_contents得到缓冲区的数据。
ob_start()在服务器打开一个缓冲区来保存所有的输出。所以在任何时候使用echo ,输出都将被加入缓冲区中,直到程序运行结束或者使用ob_flush()来结束。然后在服务器中缓冲区的内容才会发送到浏览器,由浏览器来解析显示。

函数ob_end_clean 会清除缓冲区的内容,并将缓冲区关闭,但不会输出内容。
此时得用一个函数ob_get_contents()在ob_end_clean()前面来获得缓冲区的内容。
这样的话,能将在执行ob_end_clean()前把内容保存到一个变量中,然后在ob_end_clean()后面对这个变量做操作。

这是EG:
ob_start(); // buf1
echo ' multiple ';
ob_start(); // buf2
echo ' buffers work ';
$buf2 = ob_get_contents();
ob_end_clean();
$buf1 = ob_get_contents();
ob_end_clean();
echo $buf1;
echo '<br/>';
echo $buf2;
ob_get_contents

(PHP 4, PHP 5)
ob_get_contents -- Return the contents of the output buffer
Description
string ob_get_contents ( void )
This will return the contents of the output buffer or FALSE, if output buffering isn't active.
See also ob_start() and ob_get_length().
if you use ob_start with a callback function as a parameter, and that function changes ob string (as in example in manual) don't expect that ob_get_contents will return changed ob.
it will work as you would use ob_start with no parameter at all. So don't be confused.
transfer image, another method (alternative to fsockopen or function socket) :
server(192.168.0.1)
makeimage.php
...........
...........
$nameimage="xxxx.jpg"
$comand=exec("plotvelocity.sh $nameimage $paramater1 $paramater2");
ob_start();
readfile($nameimage);
$image_data = ob_get_contents();
ob_end_clean();
echo $image_data;
unlink($nameimage);
Client (192.168.0.2)
$bild="images/newimage2.gif";
$host="192.168.0.1";
$url=file_get_contents("http://$host/makeimage.php?$querystring");
$fp = fopen("$bild", 'wb');
fwrite($fp, $url);
fclose($fp);
echo '<img src="'.$bild.'">';
naturally you can transfer whichever thing and not only images
ob_get_clean

(PHP 4 >= 4.3.0, PHP 5)
ob_get_clean -- Get current buffer contents and delete current output buffer
Description
string ob_get_clean ( void )
This will return the contents of the output buffer and end output buffering. If output buffering isn't active then FALSE is returned. ob_get_clean() essentially executes both ob_get_contents() and ob_end_clean().

例子 1. A simple ob_get_clean() example

<?php
ob_start();
echo "Hello World";
$out = ob_get_clean();
$out = strtolower($out);
var_dump($out);
?>

Our example will output: string(11) "hello world"
See also ob_start() and ob_get_contents().
Notice that the function beneath does not catch errors, so throw in an @ before those ob_* calls
Running PHP4 < 4.3.0, you can simply add the following to use the function anyway:
<?php
if (!function_exists("ob_get_clean")) {
function ob_get_clean() {
$ob_contents = ob_get_contents();
ob_end_clean();
return $ob_contents;
}
}
?>
PHP 相关文章推荐
用PHP 4.2书写安全的脚本
Oct 09 PHP
php设计模式 Singleton(单例模式)
Jun 26 PHP
php中邮箱地址正则表达式实现与详解
Apr 24 PHP
codeigniter教程之上传视频并使用ffmpeg转flv示例
Feb 13 PHP
PHP使用GIFEncoder类生成的GIF动态图片验证码
Jul 01 PHP
php数组排序usort、uksort与sort函数用法
Nov 17 PHP
ThinkPHP采用原生query实现关联查询left join实例
Dec 02 PHP
php绘制一个扇形的方法
Jan 24 PHP
PHP5.2中PDO的简单使用方法
Mar 25 PHP
PHP7新功能总结
Apr 14 PHP
用PHP做了一个领取优惠券活动的示例代码
Jul 05 PHP
解决windows上php xdebug 无法调试的问题
Feb 19 PHP
关于php操作mysql执行数据库查询的一些常用操作汇总
Jun 24 #PHP
解析crontab php自动运行的方法
Jun 24 #PHP
解析关于java,php以及html的所有文件编码与乱码的处理方法汇总
Jun 24 #PHP
使用PHP遍历文件目录与清除目录中文件的实现详解
Jun 24 #PHP
探讨:php中在foreach中使用foreach ($arr as &amp;$value) 这种类型的解释
Jun 24 #PHP
PHP中的函数-- foreach()的用法详解
Jun 24 #PHP
解析php框架codeigniter中如何使用框架的session
Jun 24 #PHP
You might like
PHP insert语法详解
2008/06/07 PHP
php后退一页表单内容保存实现方法
2012/06/17 PHP
PHP框架自动加载类文件原理详解
2017/06/06 PHP
解决php extension 加载顺序问题
2019/08/16 PHP
laravel框架数据库配置及操作数据库示例
2019/10/10 PHP
精解window.setTimeout()&amp;window.setInterval()使用方式与参数传递问题!
2007/11/23 Javascript
javascript自适应宽度的瀑布流实现思路
2013/02/20 Javascript
jQuery方法简洁实现隔行换色及toggleClass的使用
2013/03/15 Javascript
js取消单选按钮选中示例代码
2013/11/14 Javascript
利用js读取动态网站从服务器端返回的数据
2014/02/10 Javascript
JS动态修改iframe高度和宽度的方法
2015/04/01 Javascript
原生js和jQuery写的网页选项卡特效对比
2015/04/27 Javascript
jQuery图片轮播滚动切换代码分享
2020/04/20 Javascript
Bootstrap树形控件使用方法详解
2016/01/27 Javascript
AngularJS服务service用法总结
2016/12/13 Javascript
详解vue嵌套路由-query传递参数
2017/05/23 Javascript
解决vue中无法动态修改jqgrid组件 url地址的问题
2018/03/01 Javascript
nodejs基于express实现文件上传的方法
2018/03/19 NodeJs
vue-cli项目代理proxyTable配置exclude的方法
2018/09/20 Javascript
Vue 样式绑定的实现方法
2019/01/15 Javascript
使用p5.js实现动态GIF图片临摹重现
2019/10/23 Javascript
React实现类似淘宝tab居中切换效果的示例代码
2020/06/02 Javascript
fastcgi文件读取漏洞之python扫描脚本
2017/04/23 Python
Python cookbook(数据结构与算法)通过公共键对字典列表排序算法示例
2018/03/15 Python
Python3 集合set入门基础
2020/02/10 Python
ajax是什么及其工作原理
2012/02/08 面试题
美容院店长岗位职责
2014/04/08 职场文书
中等生评语大全
2014/05/04 职场文书
超市周年庆活动方案
2014/08/16 职场文书
上班迟到检讨书300字
2014/10/18 职场文书
2015年小学重阳节活动总结
2015/07/29 职场文书
大学生军训感言
2015/08/01 职场文书
《弟子规》读后感:知廉耻、明是非、懂荣辱、辨善恶
2019/12/03 职场文书
使用php的mail()函数实现发送邮件功能
2021/06/03 PHP
Java 轮询锁使用时遇到问题
2022/05/11 Java/Android
delete in子查询不走索引问题分析
2022/07/07 MySQL