PHP ob_clean()

Posted by 撒得一地 on 2016年7月18日 in PHP笔记

关联文章PHP详解ob_clean,ob_start和ob_get_contents函数

ob_clean 是 PHP 内置函数,用处很大,下面看下ob_clean()详细的定义和用法。

语法

ob_clean()

描述

ob_clean() 清空输出缓冲区的内容。默认配置下,php输出是先输出到缓冲区(output_buffering,内存区域),然后输送到浏览器。不过只要数据还没有真正发送到浏览器(严格来说是tcp buffer),那么还是有机会清空先前的缓冲区里面的数据,使用内置的ob_clean函数即可。注意:ob_clean 只是清空当前缓冲区的数据,如果先前输出的数据大于缓冲区,那么一部分数据已经发送,发送的这部分数据是无法清空的。另外如果禁用php输出缓冲区,那么 ob_clean 起不到任何效果的。

实例1:

<?php
ob_start();
echo '输出缓冲..';
$str = ob_get_contents();

ob_clean();
echo '清除后再次设置。';

$str .= ob_get_contents();

ob_clean();
ob_end_flush();
echo $str;
?>

输出:

输出缓冲..清除后再次设置。

实例2:

<?php
	//输出1这个内容被写入缓冲区等待输出
	echo 1;

	//清空缓存区的内容,之前缓冲区待输出的内容1被清除
	ob_clean();

	echo 2;
?>

最后结果输出:2

ob_clean()函数还经常用来解决图片不能正常生成的情况,当绘制图片时,如果在 header 函数之前有任何输出时,则不能正常生成图片,比如:

<?php
echo 1;

header("Content-type: image/png");
$img=imagecreatetruecolor(200,200);
imagepng($img);
imagedestroy($img);

像上面这样的代码,由于有缓冲区内有输出,则不能生成正常图片:

用ob_clean解决图片不能生成问题

如果你用 ob_clean 函数清除缓冲区的内容,则可以正常输出图片:

<?php
	echo 1;

	//清除该代码之前缓冲区的内容,即1不会被输出
	ob_clean();

	header("Content-type: image/png");
	$img=imagecreatetruecolor(200,200);
	imagepng($img);
	imagedestroy($img);

使用 ob_clean 函数后,图片正常输出:

用ob_clean解决图片不能生成问题

造成这种情况的原因是,因为图片本身也是二进制的文件,前面有输出的话,相当于正常图片的前面会多出某些字节的内容,所以会出现错误。

本文地址:http://coderschool.cn/1963.html,转载请注明来源。

标签:

上一篇:

下一篇:

相关推荐

网站地图|XML地图

Copyright © 2015-2024 技术拉近你我! All rights reserved.
闽ICP备15015576号-1 版权所有©psz.