ob_clean

(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)

ob_clean清除(擦除)活动输出缓冲区的内容

说明

ob_clean(): bool

此函数调用输出处理程序(使用 PHP_OUTPUT_HANDLER_CLEAN 标志),丢弃其返回值并清除(擦除)活动输出缓冲区的内容。

此函数不会像 ob_end_clean()ob_get_clean() 那样关闭活动输出缓冲区。

ob_clean() 在没有使用 PHP_OUTPUT_HANDLER_CLEANABLE 标志启动的活动输出缓冲区的情况下会失败。

参数

此函数没有参数。

返回值

成功时返回 true,失败时返回 false

错误/异常

如果函数失败,它会生成一个 E_NOTICE

参见

添加笔记

用户贡献笔记 5 笔记

30
meustrus
10 年前
@cornel: 当你认为你拥有这个人时,说“不要那样做”很容易。但是一个人并不总是拥有最初的编码者,甚至不是一个原始编码者的十几个。你真的建议在替代方法可能是查看数百个你没有编写、没有引入错误的源文件时,使用此函数作为临时解决方案是错误的吗?

不过,对于你的观点,不应在文件的末尾放置结束 PHP 标签是一个普遍接受的最佳实践。但是,当执行该操作需要时间机器时,使用 ob_clean() 作为临时解决方案来使动态生成的图像按预期工作是合适的。
14
lev at taintedthoughts dot com
17 年前
我发现这个函数在使用 php(与 GD)操作或创建图像时非常有用。

我花费了相当长的时间搜索大量包含的文件,以查找我在哪里有 PHP 结束标签后出现的不必要的空格 - 因为这导致了我所有动态生成的图像由于已设置输出而无法工作。更令人讨厌的是,这没有被 php 的错误报告捕获,因此我的日志文件中没有对问题行(行)的引用。我不知道为什么错误报告不会捕获它,因为它被设置为接受警告,并且以前也捕获过类似的事情。

尽管如此,我从未找到在生成我的图像之前添加额外空格或换行符的行(行),但我所做的是在我的图像操作代码之前以及 include/require 代码之后添加了这个方便的函数。

例如

<?php

// require some external library files
require ("lib/somelibrary.php");
require (
"lib/class/someclass.php");

// clean the output buffer
ob_clean();

// simple test image
header("Content-type: image/gif");
$im = imagecreate (100, 50);
imagegif($im);
imagedestroy($im);

?>

虽然这似乎是对该函数的微不足道的使用,但实际上它非常有用,可以确保在 php 中创建图像时没有任何额外的空格或换行符已经被输出。正如你们中的许多人可能已经知道的那样,出现在图像代码之前的额外行、间距和填充会阻止图像创建。如果文件“lib/somelibrary.php”在结束 PHP 标签之后至少有一个额外的换行符,那么它将完全阻止上面的脚本中的图像正常工作。

如果你像我一样在一个非常大的项目中工作,并且有很多源文件和必需文件,那么在使用 php 创建图像之前,总是清除输出缓冲区是明智之举。
9
cornel at scoalaweb dot com
11 年前
不要使用 ob_clean() 来清除包含文件“意外”生成的空格或其他不需要的内容。
包含文件本身不应该生成不需要的内容。
如果它们确实如此,那么你做错了什么,比如在“?>”之后插入空格(在 PHP 文件的末尾不应该有“?>”: https://php.net/manual/en/language.basic-syntax.phptags.php)。
1
alexander at mralexander dot ca
10 年前
如果缓冲区中还没有任何输出,然后实现 ob_clean(),则会生成(软)错误通知,例如以下内容

Notice: ob_clean() [ref.outcontrol]: failed to delete buffer. No buffer to delete. in [file-path]

你可以使用“ob_get_contents()”进行简单的检查,以确保缓冲区中存在任何内容。
-23
ngoc dot lo dot dang at gmail dot com
7 年前
注意,ob_clean() 和 ob_end_clean() 不会清除使用 header() 发送的标头
To Top