header函式詳解

2022-03-06 00:58:16 字數 3481 閱讀 4531

(php 3, php 4, php 5)

header -- 傳送乙個原始 http 標頭

可選引數 replace 指明是替換掉前一條類似的標頭還是增加一條相同型別的標頭。預設為替換,但如果將其設為false則可以強制傳送多個同類標頭。例如:

<?php

header

('www-authenticate: negotiate'

);header

('www-authenticate: ntlm'

, false

);?>

第二個可選引數 http_response_code 強制將 http 響應**設為指定值(此引數是 php 4.3.0 新加的)。

有兩種特殊的 header 呼叫。第一種是標頭以字串「http/」(大小寫不重要)開頭的,可以用來確定要傳送的 http 狀態碼。例如,如果配置了 apache 用 php 來處理找不到檔案的錯誤處理請求(使用 errordocument 指令),需要確保指令碼產生了正確的狀態碼。

注:http 狀態碼標頭行總是第乙個被傳送到客戶端,而並不管實際的header()呼叫是否是第乙個。除非 http 標頭已經傳送出去,任何時候都可以通過用新的狀態行呼叫header()函式來覆蓋原先的。

第二種特殊情況是以「location:」標頭。它不只是把這個標頭髮送回瀏覽器,它還將乙個 redirect(302)狀態碼返回給瀏覽器,除非之前已經發出了某個 3xx 狀態碼。

<?php

header

("location: "

); /* 重定向瀏覽器 */

/* 確保重定向後,後續**不會被執行 */

exit;

?>

注:http/1.1 標準需要乙個絕對位址的 uri 做為 location: 的引數, 但有一些客戶端支援相對 uri。通常可以使用 $_server['http_host']、$_server['php_self'] 及dirname()函式來自己從相對 uri 產生出絕對 uri:

注:即使啟用了 session.use_trans_sid,session id 也不會隨著 location 頭資訊被傳遞。必須手工用sid常量來傳遞。

php 指令碼通常會產生一些動態內容,這些內容必須不被瀏覽器或**伺服器快取。很多**伺服器和瀏覽器都可以被下面的方法禁止快取:

); // 過去的時間

?>

注:可能會發現即使不輸出上面所有的**,網頁也沒有被緩衝。使用者有很多選項可以設定來改變瀏覽器的預設快取行為。通過傳送上述標頭,應該可以覆蓋任何可以導致指令碼頁面被快取的設定。

另外,當使用了 session 時,利用session_cache_limiter()函式和 session.cache_limiter 選項可以用來自動產生正確的快取相關標頭。

要記住header()必須在任何實際輸出之前呼叫,不論是來自普通的 html 標記,空行或者 php。有乙個常見錯誤就是在通過include()require()或一些其它的檔案訪問類函式讀取**時,有一些空格或者空行在呼叫header()之前被傳送了出去。同樣在乙個單獨的 php/html 檔案中這個錯誤也很普遍。

<?php

/* 這將產生乙個錯誤,因為在調 header()

* 之前已經輸出了東西 */

header

('location: '

);?>

注:自 php 4 起,可以通過一些輸出緩衝函式來解決這個問題。代價是把所有向瀏覽器的輸出都快取在伺服器,直到下命令傳送它們。可以在**中使用ob_start()ob_end_flush()來實現這樣的功能,或者通過修改 php.ini

中的 output_buffering 配置選項來實現,也可以通過修改伺服器配置檔案來實現。

如果想提示使用者儲存所傳送的資料,例如乙個生成的 pdf 檔案,可以通過傳送 content-disposition 標頭提供推薦的檔名來強制瀏覽器彈出乙個儲存檔案對話方塊。

<?php

// 這樣將會直接輸出乙個 pdf 檔案

header();

header

('content-disposition: attachment; filename="downloaded.pdf"'

);// 這是 original.pdf 的原始檔

readfile

('original.pdf'

);?>

注:microsoft internet explorer 4.01 中的乙個漏洞使得該機制無法正常工作,無解決方案。在 microsoft internet explorer 5.5 中也有個漏洞影響到這一點,公升級到 service pack 2 或更高版本可以解決。

注:在安全模式下,如果設定了 www-authenticate 標頭(用於 http 認證)則指令碼的 uid 會新增到其中的 realm 部分中去。

PHP之header函式詳解

php的header函式是最常用的函式之一,用於向客戶端傳送http頭資訊。通過的用法如設定編碼 傳送http狀態值以及重定向。上述兩個例子分別是設定utf8編碼和傳送404狀態。header重定向 header location 其他常用的header用法 header永久性重定向,一般301與h...

HTTP請求Header詳解

1 http請求方式 如下表 方 法 描 述 get向web伺服器請求乙個檔案 post 向web伺服器傳送資料讓web伺服器進行處理 put向web伺服器傳送資料並儲存在web伺服器內部 head 檢查乙個物件是否存在 delete 從web伺服器上刪除乙個檔案 connect 對通道提供支援 t...

header 函式的講解

header 函式的功能是重新導向乙個url 用法 1.自動跳轉 2.頁面型別的設定 注意檔案編碼要與頁面編碼一致,可以通過選中檔案右擊properties檢視檔案編碼型別 header content type text html charset utf 8 頁面編碼設定為utf 8 header...