PHP header 函式及其常見使用

2021-06-22 08:34:56 字數 3705 閱讀 9447

向客戶端傳送原始的http報頭

需注意:

header函式必須在任何實際的輸出前呼叫,無論是一般的html標籤、檔案中空行,或者來自php。就是在這個函式之前不能有任何形式的輸出。

引數

描述string

必需。規定要傳送的報頭字串。

replace

可選。指示該報頭是否替換之前的報頭,或新增第二個報頭。

預設是 true(替換)。false(允許相同型別的多個報頭)。

可選。把 http 響應**強制為指定的值。(php 4 以及更高版本可用)

常用狀態碼:

狀態碼說明

100-199

表示成功接收請求,要求客戶端繼續提交下一次請求才能完成整個處理過程

200-299

成功接收請求,並已完成整個處理過程,常用200

300-399

未完成請求,客戶端需要進一步細化請求,比如,請求的資源已經移動到乙個新的位址,常用302,304

400-499

客戶端請求有誤 常用404

500-599

伺服器端出現錯誤,常用500

詳細見:http&ftp相應提示資訊

// 立即跳轉

header('location: ');

// 3秒後跳轉

header('refresh:3;url=')

強制瀏覽器不進行快取!

//header('expires:-1');

header('expires: mon, 26 jul 1997 05:00:00 gmt');

header('cache-control:no-cache,must-revalidate');

header('pragma:no-cache');

header('last-modified: '.date('d, j m y h:i:s t') );

說明:

expires後的時間必須是gmt格式的 如:gmdate(「m d y h:i:s」);

cache-control常見的取值有private、no-cache、max-age、must-revalidate等,預設為private。其作用根據不同的重新瀏覽方式分為以下幾種情況。

cache-directive

說明public

所有內容都將被快取

private

內容只快取到私有快取中

no-cache

所有內容都不會被快取

no-store

所有內容都不會被快取到快取或 internet 臨時檔案中

must-revalidation/proxy-revalidation

如果快取的內容失效,請求必須傳送到伺服器/**以進行重新驗證

max-age=*** (*** is numeric)

快取的內容將在 *** 秒後失效, 這個選項只在http 1.1可用, 並如果和last-modified一起使用時, 優先順序較高

開啟新視窗

如果指定cache-control的值為private、no-cache、must-revalidate,那麼開啟新視窗訪問時都會重新訪問伺服器。而如果指定了max-age值,那麼在此值內的時間就不會重新訪問伺服器,如:

表示當訪問此網頁後的5秒內不會再次訪問伺服器

在位址列回車

如果值為private或must-revalidate,則只有第一次訪問時會訪問伺服器,以後就不在訪問。如果值為no-cache,那麼每次都會訪問。如果值為max-age,則在過期之前不會重複訪問。

按後退按鈕

如果值為private、must-revalidate、max-age,則不會重訪問,而如果為no-cache,則每次都重複訪問

按重新整理按鈕

無論何值,都會重複訪問。當指定cache-control值為「no-cache」時,訪問此頁面不會在internet臨時文章夾留下頁面備份。另外,通過指定「expires」值也會影響到快取。例如,指定expires值為乙個早已過去的時間,那麼訪問此網時若重複在位址列按回車,那麼每次都會重複訪問:

expires: fri, 31 dec 1999 16:00:00 gmt
關於」last-modified

在瀏覽器第一次請求某乙個url時,伺服器端的返回狀態會是200,內容是你請求的資源,同時有乙個last-modified的屬性標記此檔案在服務期端最後被修改的時間,格式類似這樣:

last-modified: fri, 12 may 2006 18:53:33 gmt
客戶端第二次請求此url時,根據 http 協議的規定,瀏覽器會向伺服器傳送 if-modified-since 報頭,詢問該時間之後檔案是否有被修改過:

if-modified-since: fri, 12 may 2006 18:53:33 gmt
如果伺服器端的資源沒有變化,則自動返回 http 304 (not changed.)狀態碼,內容為空,這樣就節省了傳輸資料量。當伺服器端**發生改變或者重啟伺服器時,則重新發出資源,返回和第一次請求時類似。從而保證不向客戶端重**出資源,也保證當伺服器有變化時,客戶端能夠得到最新的資源。

last-modified提高效能

聰明的開發者會把last-modified 和etags請求的http報頭一起使用,這樣可利用客戶端(例如瀏覽器)的快取。因為伺服器首先產生 last-modified/etag標記,伺服器可在稍後使用它來判斷頁面是否已經被修改。本質上,客戶端通過將該記號傳回伺服器要求伺服器驗證其(客戶端)快取。

過程如下:

客戶端請求乙個頁面(a)

伺服器返回頁面a,並在給a加上乙個last-modified

客戶端展現該頁面,並將頁面連同last-modified一起快取

客戶再次請求頁面a,並將上次請求時伺服器返回的last-modified一起傳遞給伺服器

伺服器檢查該last-modified,並判斷出該頁面自上次客戶端請求之後還未被修改,直接返回響應304和乙個空的響應體。

// we'll be outputting a pdf

// it will be called downloaded.pdf

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

// the pdf source is in 1.pdf

readfile('1.pdf');

其實這樣要更好的了解這些!

header('accept-ranges:bytes');

//依位元組返回

header('content-disposition:attachement;filename="檔名"');

header('accept-length:'.$filesize);

文章出處:?p=3093

Php header 函式及其常見使用

語法 向客戶端傳送原始的http報頭 需注意 header函式必須在任何實際的輸出前呼叫,無論是一般的 html 標籤 檔案中空行,或者來自 php。就是在這個函式之前不能有任何形式的輸出。引數說明 引數描述 string 必需。規定要傳送的報頭字串。replace 可選。指示該報頭是否替換之前的報...

php header函式常見用途

header函式在php中是傳送一些頭部資訊的,我們可以直接使用它來做301跳轉等,下面我來總結關於header函式用法與一些常用見問題解決方法。傳送乙個原始 http 標頭 http header 到客戶端。標頭 header 是伺服器以 http 協義傳 html 資料到瀏覽器前所送出的字串,在...

php header函式常見用途

header函式在php中是傳送一些頭部資訊的,我們可以直接使用它來做301跳轉等,下面我來總結關於header函式用法與一些常用見問題解決方法。傳送乙個原始 http 標頭 http header 到客戶端。標頭 header 是伺服器以 http 協義傳 html 資料到瀏覽器前所送出的字串,在...