X

PHP 判斷 Header 送出前, 是否有值被送出去: headers_sent()

header() 最常被拿來送 header('Location: /'); 等等, 做網頁導向的動作.

除了這些動作外, 還有 setcookie(), header()... 等, 這些 function 在執行前, 頁面上都不能有任何輸出(空白也不行), 若有任何輸出, 就會有下述的錯誤訊息:

<b>Warning</b>:  Cannot modify header information - headers already sent by (output started at /var/www/test.php:5) in <b>/var/www/test.php</b> on line <b>6</b><br />

要預防這種錯誤發生, 可以使用 headers_sent() 判斷, 若之前已經有輸出, 就寫個 Log 檔會其它處理, 不要讓錯誤訊息直接秀在頁面上~:)

headers_sent() 範例


<?php
// 如果之前沒有任何輸出, 就送出 Location 的導向資訊
if (!headers_sent()) {
    header('Location: b.php');
    exit;
}
?>

另外要秀出 預計要送哪些 header 的資訊出去, 可以使用 headers_list() 查看.

headers_list() 範例


<?php
setcookie('abc', 'test');
header('Content-type: text/plain');

// headers_list() 會將預計要送的 header data 轉成 Array 回傳
print_r(headers_list());
/*
Array
(
    [0] => X-Powered-By: PHP/5.2.6-3
    [1] => Set-Cookie: abc=test
    [2] => Content-type: text/plain
)
*/
?>

Tsung: 對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.
Related Post