首頁  >  文章  >  php教程  >  函數header--頁面跳轉

函數header--頁面跳轉

高洛峰
高洛峰原創
2016-12-20 10:26:231474瀏覽

函數header作用:  
   頁面跳轉

http頭資訊
   頭資訊的功能很多,最主要的有以下幾個:
1、跳轉
   當瀏覽器接受到頭資訊中的Location: xxxx 後,就會自動跳到xxxx 指向的URL位址,這點有點類似用js 寫跳轉。但是這個跳轉只有瀏覽器知道,不管體內容裡有沒有東西,使用者都看不到。
   例:header("Location: http://www.example.com/");

2、指定網頁的內容
   同樣一個XML文件,如果頭資訊指定:Content-type: application/xml 的話,瀏覽器會將其依照XML檔案格式解析。但是,如果在頭資訊中是:Content-type: text/xml 的話,瀏覽器就會將其視為存文本解析。 (瀏覽器不是按照副檔名解析的)
   範例:header('Content-type: application/pdf');

3、附件
   不知道大家有沒有註意,有些時候在一些網站下載東西,點下載連線以後,結果瀏覽器將這個附件當成網頁打開了,裡面顯示的都是亂碼,這個問題也跟頭資訊有關。有時候瀏覽器會根據Content-type 來判斷是開啟還是儲存,這樣有時就會判斷錯誤(主要是網站設計者忘記寫Content-type)。其實,還有一個可以來指定該內容為附件、需要保存,這就是:Content-Disposition: attachment; filename="xxxxx"
   範例:header('Content-Disposition: attachment; filename="downloaded.pdf"' );
      //開啟文件,並輸出
      readfile('original.pdf');

HTTP協定狀態碼 
1××  1×66607請求要求進一步收到請求為進一步接收​​4項請求成功接收​​4×3046%請精修請求 
4××  客戶錯誤 
5××  伺服器錯誤 

語法:
   header(string,replace,http_response_code)
   header(string,replace,http_response_code)
   header(string,replace,http_response_code)
致規定要傳送的報頭字串。
   replace:可選。指示該報頭是否替換先前的報頭,或新增第二個報頭。預設是 true(替換)。 false(允許相同類型的多個報頭)。
   http_response_code:可選。把 HTTP 回應碼強制為指定的值。 (PHP 4 及更高版本可用)

例1:
   重定向網頁
         header("Location: http://www.example.com/");
強制使用者每次造訪這個頁面時都會取得最新資料,而不是使用存在客戶端的快取。  
          //告訴瀏覽器此頁面的過期時間(以格林威治時間表示),只要是已過的日期即可。
       header("Expires:Mon,26 Jul 1970 05:00:00 GMT");  

()取得最新資料 
       header("Last-Modified:".gmdate("D,d M Y H:i:s")."GMT");  

  Control:    no-cache,    must-revalidate");  

       //參數(並與先前的伺服器相容),即相容於HTTP1.0協定 🠎pache  

例3 :
   輸出狀態值到瀏覽器,主要用於存取權控制 
          header('HTTP/1.1 401 Unauthorized');  


例4:
   要限制一個使用者無法存取該頁,則可設定狀態為404,如下所示,這樣瀏覽器就顯示為即該頁不存在 
          header('HTTP/1.1   04    Not Found "); //這種寫法錯誤
   ?>

例5:
   隱藏檔案的位置
   html標籤 就可以實現普通文件下載。如果為了保密文件,就不能把文件連結告訴別人,可以用header函數實作文件下載。

   header("Content-type: audio/mpeg");
   header("Content-Disposition: attachment; 檔案;
   header函數前輸入內容

    一般來說在header函數前無法輸出html內容,類似的還有setcookie() 和session 函數,這些函數需要在輸出流中增加訊息頭部資訊。如果在header()執行之前有echo等語句,當後面遇到header()時,就會報出 “Warning: Cannot modify header information - headers already sent by ....”錯誤。就是說在這些函數的前面不能有任何文字、空行、回車等,而且最好在header()函數後面加上exit()函數。例如下面的錯誤寫法,在兩個php程式碼段之間有一個空白行:

//some code here
?>
//這裡應該是一個空行
    header("http/1.1 403 Forbidden");
    exit();
?>
原因:
   PHP腳本開始執行時,它可以同時發送http訊息頭部(標題)訊息和主體訊息.http訊息頭部(來自header() 或SetCookie() 函數)並不會立即發送,相反,它被保存到一個列表中. 這樣就可以允許你修改標題信息,包括缺省的標題(例如Content-Type 標題).但是,一旦腳本發送了任何非標題的輸出(例如,使用HTML 或print()調用),那麼PHP就必須先發送完所有的Header,然後終止HTTPheader.而後繼續發送主體數據.從這時開始,任何添加或修改Header信息的試圖都是不允許的,並會發送上述的錯誤訊息之一。

解決方法:
   修改php.ini開啟快取(output_buffering),或在程式中使用快取函數ob_start(),ob_end_flush() 等。原理是:output_buffering啟用時,在腳本發送輸出時,PHP並不發送HTTPheader。相反,它將此輸出透過管道(pipe)輸入到動態增加的快取中(只能在PHP4.0中使用,它具有中央化的輸出機制)。你仍然可以修改/新增header,或設定cookie,因為 header實際上並沒有發送。當全部腳本終止時,PHP將自動發送HTTP header到瀏覽器,然後再發送輸出緩衝中的內容。



更多函數header--頁面跳轉 相關文章請追蹤PHP中文網!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn