2024 年日本 PHP 研討會

ob_clean

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

ob_clean清除 (清空) 使用中輸出緩衝區的內容

說明

ob_clean(): 布林值

此函式會呼叫輸出處理程式 (使用 PHP_OUTPUT_HANDLER_CLEAN 旗標),捨棄其傳回值,並清除 (清空) 使用中輸出緩衝區的內容。

此函數不像 ob_end_clean()ob_get_clean() 那樣關閉啟用的輸出緩衝區。

如果沒有使用 PHP_OUTPUT_HANDLER_CLEANABLE 旗標啟動的啟用輸出緩衝區,ob_clean() 將會失敗。

參數

此函數沒有參數。

返回值

成功時返回 true,失敗時返回 false

錯誤/例外

如果函數失敗,它會產生一個 E_NOTICE

參見

新增註釋

使用者貢獻的註釋 4 則註釋

meustrus
10 年前
@cornel:當你認為你就在這個人面前時,說「不要那樣做」很容易。但人們並不總是擁有原始的程式設計師,甚至連十幾個原始程式設計師中的一個也沒有。當替代方案可能是查看數百個你沒有編寫的原始程式碼檔案以查找你沒有引入的錯誤時,你真的建議使用此函數作為權宜之計是錯誤的嗎?

不過,就你的觀點而言,不在檔案末尾放置 PHP 結束標籤是(或應該是)一個普遍接受的最佳實務。然而,當強制執行這一點需要時光機時,使用 ob_clean() 作為權宜之計以使動態生成的圖像按預期工作是適當的。
lev at taintedthoughts dot com
17 年前
我發現這個函數在使用 php(使用 GD)操作或建立圖像時非常有用。

我花了相當多的時間搜尋大量的包含檔案,以找到在 php 結束標籤後我不想要空格的地方 - 因為這會導致我所有動態生成的圖像因為已設定輸出而損壞。更令人惱火的是,php 的錯誤報告沒有捕捉到這一點,因此我的日誌檔案中沒有對問題行的參考。我不知道為什麼錯誤報告沒有捕捉到這一點,因為它被設定為接受警告,而且過去也曾捕捉到同樣的事情。

儘管如此,我始終沒有找到在我的圖像生成之前添加額外空格或換行的行,但我所做的只是在我的圖像操作程式碼之前以及包含/要求程式碼之後添加了這個方便的函數。

例如

<?php

// 引用一些外部函式庫檔案
require ("lib/somelibrary.php");
require (
"lib/class/someclass.php");

// 清除輸出緩衝區
ob_clean();

// 簡單的測試圖片
header("Content-type: image/gif");
$im = imagecreate (100, 50);
imagegif($im);
imagedestroy($im);

?>

雖然這看起來像是對這個函式的瑣碎應用,但實際上它對於確保在 PHP 中生成圖片時沒有額外的空格或換行符輸出非常有用。你們許多人可能已經知道,出現在圖片程式碼之前的額外換行、空格和填充會阻止圖片的創建。如果檔案 "lib/somelibrary.php" 在 PHP 結束標籤後有多餘的換行符,那麼它將完全阻止上述程式碼中的圖片正常工作。

如果您像我一樣,正在處理一個包含大量程式碼和引用檔案的極大型專案,那麼強烈建議您在使用 PHP 創建圖片之前始終清除輸出緩衝區。
cornel at scoalaweb dot com
11 年前
不要使用 ob_clean() 來清除被引入檔案「意外地」產生的空白字元或其他不需要的內容。
被引入的檔案一開始就不應該產生不需要的內容。
如果它們產生了,那麼你做錯了某些事情,例如在 "?>" 之後插入了空白字元(PHP 檔案結尾不應該有 "?>":https://php.dev.org.tw/manual/en/language.basic-syntax.phptags.php)。
alexander at mralexander dot ca
10 年前
如果緩衝區中還沒有任何輸出,然後執行 ob_clean(),則會產生(軟)錯誤通知,如下所示:

注意:ob_clean() [ref.outcontrol]:刪除緩衝區失敗。沒有要刪除的緩衝區。在 [檔案路徑]

您可以使用 "ob_get_contents()" 進行簡單檢查,以確保緩衝區中有任何內容。
To Top