Php header()函數(shù)語(yǔ)法及使用代碼
語(yǔ)法:
Void header(string $string[,bool $replace=true [, int $http_response_code)
向客戶端發(fā)送原始的HTTP報(bào)頭
需注意:
Header函數(shù)必須在任何實(shí)際的輸出前調(diào)用,無(wú)論是一般的html標(biāo)簽、文件中空行,或者來(lái)自php。就是在這個(gè)函數(shù)之前不能有任何形式的輸出。
參數(shù)說(shuō)明:
參數(shù) 描述
string 必需。規(guī)定要發(fā)送的報(bào)頭字符串。
replace 可選。指示該報(bào)頭是否替換之前的報(bào)頭,或添加第二個(gè)報(bào)頭。
默認(rèn)是 true(替換)。false(允許相同類型的多個(gè)報(bào)頭)。
http_response_code 可選。把 HTTP 響應(yīng)代碼強(qiáng)制為指定的值。(PHP 4 以及更高版本可用)
常見用法實(shí)例:
一、發(fā)送服務(wù)器狀態(tài)碼
header('HTTP/1.0 404 Not Found');
常用狀態(tài)碼:
狀態(tài)碼 說(shuō)明
100-199 表示成功接收請(qǐng)求,要求客戶端繼續(xù)提交下一次請(qǐng)求才能完成整個(gè)處理過程
200-299 成功接收請(qǐng)求,并已完成整個(gè)處理過程,常用200
300-399 未完成請(qǐng)求,客戶端需要進(jìn)一步細(xì)化請(qǐng)求,比如,請(qǐng)求的資源已經(jīng)移動(dòng)到一個(gè)新的地址,常用302,304
400-499 客戶端請(qǐng)求有誤 常用404
500-599 服務(wù)器端出現(xiàn)錯(cuò)誤,常用500
詳細(xì)見:HTTP&FTP相應(yīng)提示信息
二、頁(yè)面跳轉(zhuǎn)
// 立即跳轉(zhuǎn)
header('Location: http://chabaoo.cn/');
// 3秒后跳轉(zhuǎn)
header('refresh:3;url=http://chabaoo.cn');
3.設(shè)置瀏覽器緩存
強(qiáng)制瀏覽器不進(jìn)行緩存!
[code]
//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') );
說(shuō)明:
Expires后的時(shí)間必須是GMT格式的 如:gmdate(“M d Y H:i:s”);
Cache-control常見的取值有private、no-cache、max-age、must-revalidate等,默認(rèn)為private。其作用根據(jù)不同的重新瀏覽方式分為以下幾種情況。
Cache-directive 說(shuō)明
public 所有內(nèi)容都將被緩存
private 內(nèi)容只緩存到私有緩存中
no-cache 所有內(nèi)容都不會(huì)被緩存
no-store 所有內(nèi)容都不會(huì)被緩存到緩存或 Internet 臨時(shí)文件中
must-revalidation/proxy-revalidation 如果緩存的內(nèi)容失效,請(qǐng)求必須發(fā)送到服務(wù)器/代理以進(jìn)行重新驗(yàn)證
max-age=xxx (xxx is numeric) 緩存的內(nèi)容將在 xxx 秒后失效, 這個(gè)選項(xiàng)只在HTTP 1.1可用, 并如果和Last-Modified一起使用時(shí), 優(yōu)先級(jí)較高
打開新窗口
如果指定cache-control的值為private、no-cache、must-revalidate,那么打開新窗口訪問時(shí)都會(huì)重新訪問服務(wù)器。而如果指定了max-age值,那么在此值內(nèi)的時(shí)間就不會(huì)重新訪問服務(wù)器,如:
header('cache-control:max-age=5');
表示當(dāng)訪問此網(wǎng)頁(yè)后的5秒內(nèi)不會(huì)再次訪問服務(wù)器
在地址欄回車
如果值為private或Must-revalidate,則只有第一次訪問時(shí)會(huì)訪問服務(wù)器,以后就不在訪問。如果值為no-cache,那么每次都會(huì)訪問。如果值為max-age,則在過期之前不會(huì)重復(fù)訪問。
按后退按鈕
如果值為private、must-revalidate、max-age,則不會(huì)重訪問,而如果為no-cache,則每次都重復(fù)訪問
按刷新按鈕
無(wú)論何值,都會(huì)重復(fù)訪問。當(dāng)指定Cache-control值為“no-cache”時(shí),訪問此頁(yè)面不會(huì)在Internet臨時(shí)文章夾留下頁(yè)面?zhèn)浞荨A硗?,通過指定“Expires”值也會(huì)影響到緩存。例如,指定Expires值為一個(gè)早已過去的時(shí)間,那么訪問此網(wǎng)時(shí)若重復(fù)在地址欄按回車,那么每次都會(huì)重復(fù)訪問:
Expires: Fri, 31 Dec 1999 16:00:00 GMT
關(guān)于”Last-Modified
在瀏覽器第一次請(qǐng)求某一個(gè)URL時(shí),服務(wù)器端的返回狀態(tài)會(huì)是200,內(nèi)容是你請(qǐng)求的資源,同時(shí)有一個(gè)Last-Modified的屬性標(biāo)記此文件在服務(wù)期端最后被修改的時(shí)間,格式類似這樣:
Last-Modified: Fri, 12 May 2006 18:53:33 GMT
客戶端第二次請(qǐng)求此URL時(shí),根據(jù) HTTP 協(xié)議的規(guī)定,瀏覽器會(huì)向服務(wù)器傳送 If-Modified-Since 報(bào)頭,詢問該時(shí)間之后文件是否有被修改過:
If-Modified-Since: Fri, 12 May 2006 18:53:33 GMT
如果服務(wù)器端的資源沒有變化,則自動(dòng)返回 HTTP 304 (Not Changed.)狀態(tài)碼,內(nèi)容為空,這樣就節(jié)省了傳輸數(shù)據(jù)量。當(dāng)服務(wù)器端代碼發(fā)生改變或者重啟服務(wù)器時(shí),則重新發(fā)出資源,返回和第一次請(qǐng)求時(shí)類似。從而保證不向客戶端重復(fù)發(fā)出資源,也保證當(dāng)服務(wù)器有變化時(shí),客戶端能夠得到最新的資源。
Last-Modified提高性能
聰明的開發(fā)者會(huì)把Last-Modified 和ETags請(qǐng)求的http報(bào)頭一起使用,這樣可利用客戶端(例如瀏覽器)的緩存。因?yàn)榉?wù)器首先產(chǎn)生 Last-Modified/Etag標(biāo)記,服務(wù)器可在稍后使用它來(lái)判斷頁(yè)面是否已經(jīng)被修改。本質(zhì)上,客戶端通過將該記號(hào)傳回服務(wù)器要求服務(wù)器驗(yàn)證其(客戶端)緩存。
過程如下:
客戶端請(qǐng)求一個(gè)頁(yè)面(A)
服務(wù)器返回頁(yè)面A,并在給A加上一個(gè)Last-Modified
客戶端展現(xiàn)該頁(yè)面,并將頁(yè)面連同Last-Modified一起緩存
客戶再次請(qǐng)求頁(yè)面A,并將上次請(qǐng)求時(shí)服務(wù)器返回的Last-Modified一起傳遞給服務(wù)器
服務(wù)器檢查該Last-Modified,并判斷出該頁(yè)面自上次客戶端請(qǐng)求之后還未被修改,直接返回響應(yīng)304和一個(gè)空的響應(yīng)體。
三、文件下載
比如下載一個(gè)pdf文件
// We'll be outputting a PDF
header('Content-type: application/pdf');
// It will be called downloaded.pdf
//表明他是附件,進(jìn)行命名并下載
header('Content-Disposition: attachment; filename="downloaded.pdf"');
// The PDF source is in 1.pdf
readfile('1.pdf');
其實(shí)這樣要更好的了解這些!
header('content-type:application/octet-sream');
Header('Accept-Ranges:bytes');
//依字節(jié)返回
Header('content-disposition:attachement;filename="文件名"');
Header('Accept-length:'.$filesize);
相關(guān)文章
dedecms后臺(tái)驗(yàn)證碼總提示錯(cuò)誤的解決方法
dedecms后臺(tái)驗(yàn)證碼總提示錯(cuò)誤的解決方法...2007-03-03PHP 雜談《重構(gòu)-改善既有代碼的設(shè)計(jì)》之四 簡(jiǎn)化條件表達(dá)式
條件邏輯有可能十分復(fù)雜,因此本章提供一些重構(gòu)的手法,專門用來(lái)簡(jiǎn)化它們2012-04-04PHP中Date()時(shí)間日期函數(shù)的使用方法小結(jié)
PHP開發(fā)中Date()時(shí)間日期函數(shù)的使用方法php date() 函數(shù)可把時(shí)間戳格式化為可讀性更好的日期和時(shí)間。2011-04-04PHP郵件群發(fā)機(jī)實(shí)現(xiàn)代碼
這篇文章主要介紹了PHP郵件群發(fā)機(jī)實(shí)現(xiàn)代碼,需要的朋友可以參考下2016-02-02PHP+redis實(shí)現(xiàn)的限制搶購(gòu)防止商品超發(fā)功能詳解
這篇文章主要介紹了PHP+redis實(shí)現(xiàn)的限制搶購(gòu)防止商品超發(fā)功能,結(jié)合實(shí)例形式分析了PHP+redis通過數(shù)據(jù)標(biāo)記、日志記錄等操作防止商品搶購(gòu)中的超發(fā)相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2019-09-09PHP將session信息存儲(chǔ)到數(shù)據(jù)庫(kù)的類實(shí)例
這篇文章主要介紹了PHP將session信息存儲(chǔ)到數(shù)據(jù)庫(kù)的類,實(shí)例分析了php封裝的session信息存儲(chǔ)到數(shù)據(jù)庫(kù)的類,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03php提供實(shí)現(xiàn)反射的方法和實(shí)例代碼
在本篇文章里我們給各位分享了一篇關(guān)于php提供實(shí)現(xiàn)反射的方法和實(shí)例代碼相關(guān)內(nèi)容,有興趣的朋友們參考下。2019-09-09