PHP中的header函數(shù)是用來發(fā)送HTTP頭信息的。這在網(wǎng)頁開發(fā)中非常有用,在頁面輸出之前可以做各種處理,例如設(shè)置網(wǎng)頁編碼、設(shè)置緩存或者實(shí)現(xiàn)頁面跳轉(zhuǎn)等等。本文將主要講解header函數(shù)的使用方法,以及多種用法的具體代碼實(shí)現(xiàn)。
首先,我們來看一下最常用的header用法——實(shí)現(xiàn)頁面跳轉(zhuǎn)。比如,假設(shè)我們想要讓用戶在登陸成功后跳轉(zhuǎn)到主頁,就可以使用以下代碼:
header('Location: index.php'); //跳轉(zhuǎn)到主頁這個例子很簡單,但是其實(shí)已經(jīng)可以看出header函數(shù)的用途了。我們使用header函數(shù)發(fā)送一個HTTP頭信息,讓網(wǎng)站服務(wù)器把用戶重定向到指定頁面。 如果我們在header之前輸出了任何內(nèi)容(比如文本、HTML代碼或者空格),就會報錯。我們可以使用ob_start函數(shù)來解決這個問題,讓header函數(shù)正常工作。具體代碼如下:
ob_start(); header('Location: index.php'); ob_end_flush();簡單地說,ob_start函數(shù)用于打開輸出緩存,把所有輸出內(nèi)容緩存起來。header函數(shù)正常工作后,我們再用ob_end_flush函數(shù)把輸出緩存中的內(nèi)容發(fā)送到瀏覽器。 除了以上的跳轉(zhuǎn)功能,header函數(shù)還可以設(shè)置網(wǎng)頁編碼、緩存、文件下載等功能,看下面的例子:
//設(shè)置網(wǎng)頁編碼為UTF-8 header('Content-Type: text/html; charset=utf-8'); //設(shè)置緩存30秒 header('Cache-Control: max-age=30'); //讓瀏覽器下載文件 header('Content-Disposition: attachment; filename="example.pdf"'); header('Content-Type: application/pdf'); header('Content-Length: ' . filesize('example.pdf')); readfile('example.pdf');這些header用法可能不是很常用,但是掌握了它們,可以讓你在需要的時候快速實(shí)現(xiàn)相關(guān)功能。 還有一些需要注意的問題。比如,有些服務(wù)器不允許在輸出內(nèi)容后設(shè)置header跳轉(zhuǎn),這時可以使用meta標(biāo)簽實(shí)現(xiàn)跳轉(zhuǎn)。代碼如下:
echo '';這個代碼和header函數(shù)實(shí)現(xiàn)的效果是一樣的,不過在一些特定情況下會更可靠。當(dāng)然,在絕大部分情況下,我們都可以用header來實(shí)現(xiàn)跳轉(zhuǎn)。 另外,有些服務(wù)器也不允許在header函數(shù)之前設(shè)置Cookie,這時可以先使用setcookie函數(shù)創(chuàng)建Cookie,再在下一次請求時使用header函數(shù)將Cookie發(fā)送給瀏覽器。具體代碼如下:
setcookie('username', 'Alice', time()+3600); header('Location: index.php');當(dāng)然,有些情況需要發(fā)送多個HTTP頭,例如同時設(shè)置網(wǎng)頁編碼和緩存,我們可以使用多個header函數(shù)來實(shí)現(xiàn)。代碼如下:
header('Content-Type: text/html; charset=utf-8'); header('Cache-Control: max-age=30');總的來說,header函數(shù)是非常有用的一個PHP函數(shù),掌握了它的使用方法,就可以輕松實(shí)現(xiàn)各種功能,改善用戶體驗(yàn)。
下一篇java簽名和摘要