PHP Conference Japan 2024

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

参见

添加笔记

用户贡献笔记 4 条笔记

31
meustrus
10 年前
@cornel:当你认为你把人直接放在你面前时,说“别那样做”很容易。但你并不总是拥有最初的程序员,甚至也不是十几个最初程序员中的一个。当你认为你把人直接放在你面前时,说“别那样做”很容易。但你并不总是拥有最初的程序员,甚至也不是十几个最初程序员中的一个。你真的建议在替代方法可能是查看数百个你没有编写且没有引入错误的源文件时,使用此函数作为权宜之计是错误的吗?

不过,就你的观点而言,一个普遍接受的最佳实践是不在文件的末尾放置结束的PHP标签。然而,当执行此操作需要时间机器时,使用ob_clean()作为权宜之计以使动态生成的图像按预期工作是合适的。
14
lev at taintedthoughts dot com
17 年前
我发现此函数在使用PHP(使用GD)处理或创建图像时非常有用。

我花了相当长的时间搜索大量包含的文件,以查找我在PHP的结束标签后是否有不需要的空格 - 因为这导致了我所有动态生成的图像由于输出已设置而中断。更令人恼火的是,这并没有被PHP的错误报告捕获,因此我的日志文件中没有对问题行(s)的引用。我不知道为什么错误报告不会捕获到这一点,因为它被设置为接受警告,并且过去曾捕获过同样的问题。

尽管如此,我仍然没有找到在生成图像之前添加额外空格或换行符的行(s),但我所做的是在我的图像处理代码之前以及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()”进行简单的检查,以确保缓冲区中是否有任何内容。
To Top