首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 4 輸出緩衝區控制函數詳解與實戰應用

     編輯:PHP 相關知識

緩衝區控制解決 Header 錯誤

在 PHP 中使用 header() 或 setcookie() 前若有任何輸出 (含空白、換行),會觸發 "Header had already sent" 錯誤。PHP 4 引入輸出緩衡函數集,將非 Header 輸出暫存於伺服器記憶體,延遲發送至瀏覽器,完美解決此問題。

核心函數速查表

函數原型功能說明
flushflush()輸出並清空緩衝區常用、效率高
ob_startvoid ob_start(void)開啟輸出緩衝啟用後所有非 Header 輸出暫存內部緩衝區
ob_get_contentsstring ob_get_contents(void)取得緩衝區內容未啟用緩衝時回傳 FALSE
ob_get_lengthint ob_get_length(void)取得緩衝區長度未啟用時回傳 FALSE
ob_end_flushvoid ob_end_flush(void)發送緩衝內容並關閉緩衝輸出內容給瀏覽器
ob_end_cleanvoid ob_end_clean(void)刪除緩衝內容並關閉緩衝不輸出內容
ob_implicit_flushvoid ob_implicit_flush([int flag])開啟/關閉絕對刷新類似 Perl $|=x,預設關閉

實戰範例

1. 防止 Header 錯誤

<?php
ob_start();           // 開啟緩衝
echo "Welcome\n";     // 輸出暫存緩衝區
header("Location: next.php"); // 重導向不再報錯
?>

若移除 ob_start(),第 4 行會報錯;加上後,echo 內容留在伺服器緩衝區,直到 flush 或 ob_end_flush 才輸出,Header 尚未發送,故不報錯。

2. 捕獲並儲存 phpinfo() 輸出

<?php
ob_start();
phpinfo();
$info = ob_get_contents(); // 取得緩衝區內容
$file = fopen('phpinfo.txt', 'w');
fwrite($file, $info);
fclose($file);
?>

此法可將不同用戶的 phpinfo() 輸出儲存為檔案,舊版 PHP 無法辦到。緩衝區控制實質上將「過程」轉化為「函數」,極大擴展應用彈性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved