最近在學(xué)習(xí)PHP的過(guò)程中,接觸了一個(gè)非常重要的知識(shí)點(diǎn)——header()函數(shù)。相信很多PHP新手也會(huì)使用到這個(gè)函數(shù),它能夠返回一些關(guān)于HTTP響應(yīng)的信息,比如重定向、設(shè)置緩存等。
比如當(dāng)我們?cè)谝粋€(gè)PHP腳本中使用header('Location: index.php');函數(shù),就可以將用戶重定向到"index.php"頁(yè)面。再比如我們使用header('Cache-Control: no-cache, must-revalidate');函數(shù),就可以設(shè)置瀏覽器緩存。
下面我們就來(lái)具體看一下header()函數(shù)的使用方法和注意事項(xiàng)。
1. header()函數(shù)的語(yǔ)法
header()函數(shù)的語(yǔ)法如下:
```
header(string $header[, bool $replace = true[, int $http_response_code]])
```
參數(shù)說(shuō)明:
- $header: 必須要填寫(xiě)的參數(shù),它為一段HTTP響應(yīng)頭字符串,可以填寫(xiě)多個(gè),多個(gè)參數(shù)之間用"\r\n"分隔。
- $replace: 可選參數(shù),默認(rèn)為true,表示替換之前已發(fā)送的HTTP響應(yīng)頭字符串。如果設(shè)置為false,則可以追加。
- $http_response_code: 可選參數(shù),設(shè)定該參數(shù)能夠控制HTTP狀態(tài)碼,比如可以重定向。
2. 使用header()函數(shù)需要注意的問(wèn)題
(1)header()函數(shù)必須在輸出任何內(nèi)容之前調(diào)用
因?yàn)镠TTP響應(yīng)頭必須要在HTTP響應(yīng)體之前先發(fā)送到瀏覽器。
舉個(gè)例子:
``````
上述代碼是錯(cuò)誤的,因?yàn)閔eader()函數(shù)被輸出的內(nèi)容影響,必須先輸出header()函數(shù),才能再輸出其他的內(nèi)容。
我們可以使用ob_start()函數(shù)來(lái)緩沖PHP輸出:
``````
(2)header()函數(shù)必須在PHP腳本中的第一行調(diào)用之前
如果在PHP腳本中調(diào)用了new關(guān)鍵字,header()函數(shù)則不能起作用。因?yàn)閚ew會(huì)輸出內(nèi)容到瀏覽器中,這時(shí)候HTTP響應(yīng)頭已經(jīng)被輸出,再使用header()函數(shù)已經(jīng)沒(méi)有實(shí)際意義。
(3) header()函數(shù)必須在發(fā)送HTTP響應(yīng)體之前
像返回文件、列表等特殊的HTTP響應(yīng)體是不能使用header()函數(shù)來(lái)實(shí)現(xiàn)的,可以使用readfile()、fpassthru()、file()等函數(shù)。
3. 使用header()函數(shù)設(shè)置狀態(tài)碼和文檔類型
(1)設(shè)置狀態(tài)碼
我們可以使用header()函數(shù)將狀態(tài)碼設(shè)置為404。
``````
我們也可以使用header()函數(shù)將狀態(tài)碼設(shè)置為302,重定向到另外一個(gè)頁(yè)面上。
``````
(2)設(shè)置文檔類型
header()函數(shù)還可以設(shè)置文檔的Content-Type。
``````
不同類型的Content-Type可以在函數(shù)中進(jìn)行設(shè)置,例如:
- text/html:用于顯示HTML源碼。
- application/pdf:用于在瀏覽器中顯示PDF文件。
- image/png:用于在瀏覽器中顯示PNG文件等。
4. 使用header()函數(shù)設(shè)置緩存
header()函數(shù)能夠非常方便地設(shè)置瀏覽器緩存。我們可以使用header()函數(shù)設(shè)置Expires和Cache-Control:
(1)Expires
設(shè)置Expires可以告訴瀏覽器緩存過(guò)期的時(shí)間。
``````
上述代碼可以將瀏覽器的緩存過(guò)期時(shí)間設(shè)置為1年。
(2)Cache-Control
使用Cache-Control可以更為靈活地設(shè)置緩存。
``````
上述代碼將瀏覽器的緩存過(guò)期時(shí)間設(shè)置為1年,并且保證必須重新驗(yàn)證才能使用該緩存。
總結(jié)
在開(kāi)發(fā)過(guò)程中,合理地使用header()函數(shù)非常重要。我們應(yīng)該注意調(diào)用時(shí)機(jī),不要在輸出之后再使用頭部函數(shù);使用前先調(diào)用ob_start(),保留輸出;設(shè)置的時(shí)候要注意,特別是狀態(tài)碼的設(shè)置;還要合理設(shè)置文檔類型和緩存,提高用戶的體驗(yàn)。
網(wǎng)站導(dǎo)航
- zblogPHP模板zbpkf
- zblog免費(fèi)模板zblogfree
- zblog模板學(xué)習(xí)zblogxuexi
- zblogPHP仿站zbpfang