header location重新導向語句對頁面進行跳轉失敗_PHP教程

來源:互聯網
上載者:User
函數header作用:

頁面跳轉

http頭資訊
頭資訊的作用很多,最主要的有下面幾個:
1、跳轉
當瀏覽器接受到頭資訊中的 Location: xxxx 後,就會自動跳轉到 xxxx 指向的URL地址,這點有點類似用 js 寫跳轉。但是這個跳轉只有瀏覽器知道,不管體內容裡有沒有東西,使用者都看不到。
例:header("Location: http://www.bkjia.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××  保留
2××  表示請求成功地接收
3××  為完成請求客戶需進一步細化請求
4××  客戶錯誤
5××  伺服器錯誤

文法:
header(string,replace,http_response_code)
參數
string:必需。規定要發送的前序字串。
replace:可選。指示該前序是否替換之前的前序,或添加第二個前序。預設是 true(替換)。false(允許相同類型的多個前序)。
http_response_code:可選。把 HTTP 響應代碼強製為指定的值。(PHP 4 以及更高版本可用)

例1:
重新導向網頁

header("Location: http://www.example.com/");

exit;

?>
例2:
強制使用者每次訪問這個頁面時擷取最新資料,而不是使用存在用戶端的緩衝。

//告訴瀏覽器此頁面的到期時間(用格林威治時間表示),只要是已經過去的日期即可。

header("Expires:Mon,26 Jul 1970 05:00:00 GMT");

//告訴瀏覽器此頁面的最後更新日期(用格林威治時間表示)也就是當天,目的就是強迫瀏覽器擷取最新資料

header("Last-Modified:".gmdate("D,d M Y H:i:s")."GMT");

//告訴用戶端瀏覽器不使用緩衝

header("Cache-Control: no-cache, must-revalidate");

//參數(與以前的伺服器相容),即相容HTTP1.0協議

header("Pragma: no-cache");

?>
例3:
輸出狀態值到瀏覽器,主要用於存取權限控制

header('HTTP/1.1 401 Unauthorized');

header('status: 401 Unauthorized');

?>
例4:
要限制一個使用者不能訪問該頁,則可設定狀態為404,如下所示,這樣瀏覽器就顯示為即該頁不存在

header('HTTP/1.1 404 Not Found');

header("status: 404 Not Found"); //這種寫法錯誤

?>
例5:
隱藏檔案的位置
html標籤 就可以實現普通檔案下載。如果為了保密檔案,就不能把檔案連結告訴別人,可以用header函數實現檔案下載。
header("Content-type: audio/mpeg");
header("Content-Disposition: attachment; filename=filenale");
header("Content-Description: PHP3 Generated Data");
例6:
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),將output_buffering=0修改成output_buffering=4096
或者在程式中使用緩衝函數ob_start(),ob_end_flush() 等。原理是:output_buffering被啟用時,在指令碼發送輸出時,PHP並不發送HTTPheader。相反,它將此輸出通過管道(pipe)輸入到動態增加的緩衝中(只能在PHP4.0中使用,它具有中央化的輸出機制)。你仍然可以修改/添加header,或者設定cookie,因為 header實際上並沒有發送。當全部指令碼終止時,PHP將自動發送HTTP header到瀏覽器,然後再發送輸出緩衝中的內容。

http://www.bkjia.com/PHPjc/371943.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/371943.htmlTechArticle函數header作用: 頁面跳轉 http頭資訊 頭資訊的作用很多,最主要的有下面幾個: 1、跳轉 當瀏覽器接受到頭資訊中的 Location: xxxx 後,就會...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.