IT貓撲網(wǎng):您身邊最放心的安全下載站! 最新更新|軟件分類|軟件專題|手機版|論壇轉(zhuǎn)貼|軟件發(fā)布

您當(dāng)前所在位置: 首頁網(wǎng)絡(luò)編程PHP編程 → header location重定向語句對頁面進(jìn)行跳轉(zhuǎn)失敗的原因

header location重定向語句對頁面進(jìn)行跳轉(zhuǎn)失敗的原因

時間:2015-06-28 00:00:00 來源:IT貓撲網(wǎng) 作者:網(wǎng)管聯(lián)盟 我要評論(0)

函數(shù)header作用:??

頁面跳轉(zhuǎn)

http頭信息

頭信息的作用很多,最主要的有下面幾個:

1、跳轉(zhuǎn)
? ?當(dāng)瀏覽器接受到頭信息中的 Location: xxxx 后,就會自動跳轉(zhuǎn)到 xxxx 指向的URL地址,這點有點類似用 js 寫跳轉(zhuǎn)。但是這個跳轉(zhuǎn)只有瀏覽器知道,不管體內(nèi)容里有沒有東西,用戶都看不到。
? ?例:header("Location: http://ygkjgt7.cn/");

2、指定網(wǎng)頁的內(nèi)容
? ?同樣一個XML文件,如果頭信息中指定:Content-type: application/xml 的話,瀏覽器會將其按照XML文件格式解析。但是,如果頭信息中是:Content-type: text/xml 的話,瀏覽器就會將其看作存文本解析。(瀏覽器不是按照擴展名解析文件的)
? ?例:header('Content-type: application/pdf');

3、附件
? ?不知道大家有沒有注意,有些時候在一些網(wǎng)站下載東西,點下載連接以后,結(jié)果瀏覽器將這個附件當(dāng)成網(wǎng)頁打開了,里面顯示的都是亂碼,這個問題也和頭信息有關(guān)。有時候瀏覽器根據(jù)Content-type 來判斷是打開還是保存,這樣有時就會判斷錯誤(主要是網(wǎng)站設(shè)計者忘記寫Content-type)。其實,還有一個可以來指定該內(nèi)容為附件、需要保存,這個就是:Content-Disposition: attachment; filename="xxxxx"
? ?例:header('Content-Disposition: attachment; filename="downloaded.pdf"');
? ?? ?//打開文件,并輸出
? ?? ?readfile('original.pdf');

HTTP協(xié)議狀態(tài)碼
1××  保留??
2××  表示請求成功地接收??
3××  為完成請求客戶需進(jìn)一步細(xì)化請求??
4××  客戶錯誤??
5××  服務(wù)器錯誤??

語法:
? ?header(string,replace,http_response_code)
參數(shù)
? ?string:必需。規(guī)定要發(fā)送的報頭字符串。
? ?replace:可選。指示該報頭是否替換之前的報頭,或添加第二個報頭。默認(rèn)是 true(替換)。false(允許相同類型的多個報頭)。
? ?http_response_code:可選。把 HTTP 響應(yīng)代碼強制為指定的值。(PHP 4 以及更高版本可用)

例1:
? ?重定向網(wǎng)頁
  1. ? ?
  2. ? ?? ?header("Location: http://ygkjgt7.cn/");
  3. ? ?? ?exit;
  4. ? ??>
例2:
? ?強制用戶每次訪問這個頁面時獲取最新資料,而不是使用存在客戶端的緩存。
  1. ? ?
  2. ? ?? ? //告訴瀏覽器此頁面的過期時間(用格林威治時間表示),只要是已經(jīng)過去的日期即可。??
  3. ? ?? ? header("Expires:Mon,26 Jul 1970 05:00:00 GMT");??
  4. ?
  5. ? ?? ? //告訴瀏覽器此頁面的最后更新日期(用格林威治時間表示)也就是當(dāng)天,目的就是強迫瀏覽器獲取最新資料??
  6. ? ?? ? header("Last-Modified:".gmdate("D,d M Y H:i:s")."GMT");??
  7. ?
  8. ? ?? ? //告訴客戶端瀏覽器不使用緩存??
  9. ? ?? ? header("Cache-Control:? ? no-cache,? ? must-revalidate");??
  10. ?
  11. ? ?? ? //參數(shù)(與以前的服務(wù)器兼容),即兼容HTTP1.0協(xié)議??
  12. ? ?? ? header("Pragma:? ? no-cache");
  13. ???>??
例3:
? ?輸出狀態(tài)值到瀏覽器,主要用于訪問權(quán)限控制
  1. ? ?
  2. ? ?? ? header('HTTP/1.1 401 Unauthorized');??
  3. ? ?? ? header('status: 401 Unauthorized');??
  4. ? ??>??
例4:
? ?要限制一個用戶不能訪問該頁,則可設(shè)置狀態(tài)為404,如下所示,這樣瀏覽器就顯示為即該頁不存在
  1. ? ?
  2. ? ?? ? header('HTTP/1.1? ? 404? ? Not Found');??
  3. ? ?? ? header("status:? ? 404? ? Not Found"); //這種寫法錯誤
  4. ? ??>
例5:
? ?隱藏文件的位置
? ?html標(biāo)簽 就可以實現(xiàn)普通文件下載。如果為了保密文件,就不能把文件鏈接告訴別人,可以用header函數(shù)實現(xiàn)文件下載。
??header("Content-type: audio/mpeg");
? ?header("Content-Disposition: attachment; filename=filenale");
? ?header("Content-Description: PHP3 Generated Data");
例6:
? ?header函數(shù)前輸入內(nèi)容

? ? 一般來說在header函數(shù)前不能輸出html內(nèi)容,類似的還有setcookie() 和 session 函數(shù),這些函數(shù)需要在輸出流中增加消息頭部信息。如果在header()執(zhí)行之前有echo等語句,當(dāng)后面遇到header()時,就會報出 "Warning: Cannot modify header information - headers already sent by ...."錯誤。就是說在這些函數(shù)的前面不能有任何文字、空行、回車等,而且最好在header()函數(shù)后加上exit()函數(shù)。例如下面的錯誤寫法,在兩個php代碼段之間有一個空行:
  1. //some code here
  2. ?>
  3. //這里應(yīng)該是一個空行
  4. ? ? header("http/1.1 403 Forbidden");
  5. ? ? exit();
  6. ?>
原因:
? ?PHP腳本開始執(zhí)行 時,它可以同時發(fā)送http消息頭部(標(biāo)題)信息和主體信息. http消息頭部(來自 header() 或SetCookie() 函數(shù))并不會立即發(fā)送,相反,它被保存到一個列表中. 這樣就可以允許你修改標(biāo)題信息,包括缺省的標(biāo)題(例如Content-Type 標(biāo)題).但是,一旦腳本發(fā)送了任何非標(biāo)題的輸出(例如,使用 HTML 或 print()調(diào)用),那么PHP就必須先發(fā)送完所有的Header,然后終止 HTTPheader.而后繼續(xù)發(fā)送主體數(shù)據(jù).從這時開始,任何添加或修改Header信息的試圖都是不允許的,并會發(fā)送上述的錯誤消息之一。

解決辦法:
修改php.ini打開緩存(output_buffering),將output_buffering=0修改成output_buffering=4096
或者在程序中使用緩存函數(shù)ob_start(),ob_end_flush() 等。原理是:output_buffering被啟用時,在腳本發(fā)送輸出時,PHP并不發(fā)送HTTPheader。相反,它將此輸出通過管道(pipe)輸入到動態(tài)增加的緩存中(只能在PHP4.0中使用,它具有中央化的輸出機制)。你仍然可以修改/添加header,或者設(shè)置cookie,因為 header實際上并沒有發(fā)送。當(dāng)全部腳本終止時,PHP將自動發(fā)送HTTP header到瀏覽器,然后再發(fā)送輸出緩沖中的內(nèi)容。

關(guān)鍵詞標(biāo)簽:php

相關(guān)閱讀

文章評論
發(fā)表評論

熱門文章 plsql developer怎么連接數(shù)據(jù)庫-plsql developer連接數(shù)據(jù)庫方法 plsql developer怎么連接數(shù)據(jù)庫-plsql developer連接數(shù)據(jù)庫方法 2021年最好用的10款php開發(fā)工具推薦 2021年最好用的10款php開發(fā)工具推薦 php利用淘寶IP庫獲取用戶ip地理位置 php利用淘寶IP庫獲取用戶ip地理位置 在 PHP 中使用命令行工具 在 PHP 中使用命令行工具

相關(guān)下載

    人氣排行 詳解ucenter原理及第三方應(yīng)用程序整合思路、方法 plsql developer怎么連接數(shù)據(jù)庫-plsql developer連接數(shù)據(jù)庫方法 PHP中防止SQL注入攻擊 PHP會話Session的具體使用方法解析 PHP運行出現(xiàn)Notice : Use of undefined constant 的解決辦法 PHP如何清空mySQL數(shù)據(jù)庫 CakePHP程序員必須知道的21條技巧 PHP采集圖片實例(PHP采集)