php header 詳細(xì)使用說明與使用心得第2/2頁
更新時(shí)間:2009年11月12日 20:42:09 作者:
下面是關(guān)于header函數(shù)的詳細(xì)使用說明
header -- 發(fā)送一個(gè)原始 HTTP 標(biāo)頭說明
void header ( string string [, bool replace [, int http_response_code]] )
header() 函數(shù)用來發(fā)送一個(gè)原始 HTTP 標(biāo)頭。有關(guān) HTTP 標(biāo)頭的更多內(nèi)容見 HTTP/1.1 規(guī)范。
可選參數(shù) replace 指明是替換掉前一條類似的標(biāo)頭還是增加一條相同類型的標(biāo)頭。默認(rèn)為替換,但如果將其設(shè)為 FALSE 則可以強(qiáng)制發(fā)送多個(gè)同類標(biāo)頭。例如:
<?php
header('WWW-Authenticate: Negotiate');
header('WWW-Authenticate: NTLM', false);
?>
第二個(gè)可選參數(shù) http_response_code 強(qiáng)制將 HTTP 響應(yīng)代碼設(shè)為指定值(此參數(shù)是 PHP 4.3.0 新加的)。
有兩種特殊的 header 調(diào)用。第一種是標(biāo)頭以字符串“HTTP/”(大小寫不重要)開頭的,可以用來確定要發(fā)送的 HTTP 狀態(tài)碼。例如,如果配置了 Apache 用 PHP 來處理找不到文件的錯(cuò)誤處理請(qǐng)求(使用 ErrorDocument 指令),需要確保腳本產(chǎn)生了正確的狀態(tài)碼。
<?php
header("HTTP/1.0 404 Not Found")
?>
注: HTTP 狀態(tài)碼標(biāo)頭行總是第一個(gè)被發(fā)送到客戶端,而并不管實(shí)際的 header() 調(diào)用是否是第一個(gè)。除非 HTTP 標(biāo)頭已經(jīng)發(fā)送出去,任何時(shí)候都可以通過用新的狀態(tài)行調(diào)用 header() 函數(shù)來覆蓋原先的。
第二種特殊情況是以“Location:”標(biāo)頭。它不只是把這個(gè)標(biāo)頭發(fā)送回瀏覽器,它還將一個(gè) REDIRECT(302)狀態(tài)碼返回給瀏覽器,除非之前已經(jīng)發(fā)出了某個(gè) 3xx 狀態(tài)碼。
<?php
header("Location: http://www.example.com/"); /* 重定向?yàn)g覽器 */
/* 確保重定向后,后續(xù)代碼不會(huì)被執(zhí)行 */
exit;
?>
注: HTTP/1.1 標(biāo)準(zhǔn)需要一個(gè)絕對(duì)地址的 URI 做為 Location: 的參數(shù), 但有一些客戶端支持相對(duì) URI。通??梢允褂?$_SERVER['HTTP_HOST']、$_SERVER['PHP_SELF'] 及 dirname() 函數(shù)來自己從相對(duì) URI 產(chǎn)生出絕對(duì) URI:
<?php
header("Location: http://".$_SERVER['HTTP_HOST']
. rtrim(dirname($_SERVER['PHP_SELF']), '/\\')
."/".$relative_url);
?>
注: 即使啟用了 session.use_trans_sid,Session ID 也不會(huì)隨著 Location 頭信息被傳遞。必須手工用 SID 常量來傳遞。
PHP 腳本通常會(huì)產(chǎn)生一些動(dòng)態(tài)內(nèi)容,這些內(nèi)容必須不被瀏覽器或代理服務(wù)器緩存。很多代理服務(wù)器和瀏覽器都可以被下面的方法禁止緩存:
<?php
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // 過去的時(shí)間
?>
注: 可能會(huì)發(fā)現(xiàn)即使不輸出上面所有的代碼,網(wǎng)頁也沒有被緩沖。用戶有很多選項(xiàng)可以設(shè)置來改變?yōu)g覽器的默認(rèn)緩存行為。通過發(fā)送上述標(biāo)頭,應(yīng)該可以覆蓋任何可以導(dǎo)致腳本頁面被緩存的設(shè)置。
另外,當(dāng)使用了 session 時(shí),利用 session_cache_limiter() 函數(shù)和 session.cache_limiter 選項(xiàng)可以用來自動(dòng)產(chǎn)生正確的緩存相關(guān)標(biāo)頭。
要記住 header() 必須在任何實(shí)際輸出之前調(diào)用,不論是來自普通的 HTML 標(biāo)記,空行或者 PHP。有一個(gè)常見錯(cuò)誤就是在通過 include(),require() 或一些其它的文件存取類函數(shù)讀取代碼時(shí),有一些空格或者空行在調(diào)用 header() 之前被發(fā)送了出去。同樣在一個(gè)單獨(dú)的 PHP/HTML 文件中這個(gè)錯(cuò)誤也很普遍。
<html>
<?php
/* 這將產(chǎn)生一個(gè)錯(cuò)誤,因?yàn)樵谡{(diào) header()
* 之前已經(jīng)輸出了東西 */
header('Location: http://www.example.com/');
?>
注: 自 PHP 4 起,可以通過一些輸出緩沖函數(shù)來解決這個(gè)問題。代價(jià)是把所有向?yàn)g覽器的輸出都緩存在服務(wù)器,直到下命令發(fā)送它們。可以在代碼中使用 ob_start() 及 ob_end_flush() 來實(shí)現(xiàn)這樣的功能,或者通過修改 php.ini 中的 output_buffering 配置選項(xiàng)來實(shí)現(xiàn),也可以通過修改服務(wù)器配置文件來實(shí)現(xiàn)。
相關(guān)文章
PHP關(guān)聯(lián)數(shù)組實(shí)現(xiàn)根據(jù)元素值刪除元素的方法
這篇文章主要介紹了PHP關(guān)聯(lián)數(shù)組實(shí)現(xiàn)根據(jù)元素值刪除元素的方法,實(shí)例分析了php差集運(yùn)算函數(shù)array_diff及數(shù)組遍歷對(duì)比刪除的兩種方法,需要的朋友可以參考下2015-06-06
PHP使用http_build_query()構(gòu)造URL字符串的方法
這篇文章主要介紹了PHP使用http_build_query()構(gòu)造URL字符串的方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了http_build_query函數(shù)的功能,使用技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下2016-04-04
編譯php 5.2.14+fpm+memcached(具體操作詳解)
本篇文章是對(duì)編譯php5.2.14+fpm+memcached的具體操作進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
PHP實(shí)現(xiàn)的memcache環(huán)形隊(duì)列類實(shí)例
這篇文章主要介紹了PHP實(shí)現(xiàn)的memcache環(huán)形隊(duì)列類,實(shí)例分析了基于memcache實(shí)現(xiàn)環(huán)形隊(duì)列的方法,涉及memcache緩存及隊(duì)列的相關(guān)技巧,需要的朋友可以參考下2015-07-07
php上傳后臺(tái)無法收到數(shù)據(jù)解決方法
在本篇文章里小編給大家整理的是關(guān)于php無法收到數(shù)據(jù)的相關(guān)知識(shí)點(diǎn)內(nèi)容,有需要的朋友們參考學(xué)習(xí)下。2019-10-10
Linux Apache PHP Oracle 安裝配置(具體操作步驟)
本篇文章是對(duì)在Linux下安裝Apache+PHP連接Oracle的具體操作步驟進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06

