php实现页面强制跳转,PHP实现页面跳转的几种方法 - 米扑博客
在PHP中如何從一個頁面重定向到另外一個頁面呢?
方法1:header() 跳轉
header?—?發送原生 HTTP 頭,header()?用于發送原生的?HTTP?頭。關于?HTTP?頭的更多信息請參考???HTTP/1.1 specification。
請注意header()必須在任何實際輸出之前調用,不管是普通的 HTML 標簽,還是文件或 PHP 輸出的空行,空格。這是個常見的錯誤,在通過include,require,或者其訪問其他文件里面的函數的時候,如果在header()被調用之前,其中有空格或者空行,便會報錯。同樣的問題也存在于單獨的 PHP/HTML 文件中。
格式:
header?(?string?$string?[,?bool?$replace?= true?[,?int?$http_response_code?]] ) :?void
PHP里的header()函數的作用就是向瀏覽器發出由HTTP協議規定的本來應該通過WEB服務器的控制指令,
例如,聲明返回信息的類型("Context-type: xxx/xxx")、頁面的屬性("No cache", "Expire")等等。
用HTTP頭信息重定向到另外一個頁面的方法如下:
// header("Location: https://proxy.mimvp.com");// success
$go_url = "https://proxy.mimvp.com";
header("Location: $go_url");
exit();// exit 是個語法結構,如果沒有 status 參數要傳入,可以省略圓括號, 即 exit;
?>
說明:注意 "Localtion: "的寫法,Location 緊跟著一個冒號,空格,目標網址。
上面兩種寫法都是這正確的,Location 是立即跳轉。
header 跳轉需要同時滿足以下三個條件:
1、location和“:”號間不能有空格,“:”號與url之間有一個空格。
2、在用header前不能有任何的輸出, 即沒有echo, print, printf, var_dump等。
3、header后的PHP代碼還會被執行,因此一般用 exit 或 exit() 退出。
補充:php exit 的多種寫法,詳見 php exit
// exit program normally
exit;
exit();
exit(0);
// exit with an error code
exit(1);
exit(0376); // octal
?>
方法2:meta 標簽
用 HTML 的 meta 標記,即用 meta 的 refresh 標記
I love mimvp.com, waiting 5, 4, 3, 2, 1...
說明:以上兩種 meta 方式(直接網址,賦值變量網址)都成功,在當前頁面停留5秒鐘, 然后跳轉到目標網址
一般用于提示用戶的場景,等待用戶看完提示后,定時(停留5秒鐘)跳轉到了目標網址;若設置為0秒,則立即跳轉。
方法3:js 腳本
echo "";
// $url="https://proxy.mimvp.com";
// echo "
// echo "window.location.href='$url'";
// echo "";
exit();// exit 是個語法結構,如果沒有 status 參數要傳入,可以省略圓括號, 即 exit;
?>
利用 script 實現,還有一個好處,就是可以在新窗口、新父窗口打開網頁
// 新窗體(tab)打開
echo "";
// 父窗口(window)打開
echo "";
?>
window.location.href 和 window.open() 區別
一、性質不同
1、window.location:window.location是window對象的屬性。
2、window.open():window.open是window對象的方法。
二、用途不同
1、window.location:window.location用來替換當前頁,也就是重新定位當前頁?。
2、window.open():window.open用來讓鏈接頁面在新窗口中打開。
三、打開網站不同
1、window.location:window.location只能在一個網站中打開本網站的網頁。
2、window.open():window.open可以在一個網站上打開另外的一個網站的地址?。
用window.location和window.open做鏈接的區別:
"top.location.href"是最外層的頁面跳轉
"window.location.href"、"location.href"是本頁面跳轉
"parent.location.href"是上一層頁面跳轉.
location是window對象的屬性,而所有的網頁下的對象都是屬于window作用域鏈中(這是頂級作用域),所以使用時是可以省略window。
而top是指向頂級窗口對象,parent是指向父級窗口對象。
window.location是window對象的屬性,而window.open是window對象的方法
window.location是你對當前瀏覽器窗口的URL地址對象的參考!
window.open是用來打開一個新窗口的函數!
window.open()是可以在一個網站上打開另外的一個網站的地址
而window.location()是只能在一個網站中打開本網站的網頁
window.location或window.open如何指定target?
這是一個經常遇到的問題,特別是在用frame框架的時候
解決辦法:
window.location 改為 top.location 即可在頂部鏈接到指定頁
或
window.open("你的網址","_top");
PHP header() 函數
header() 函數向客戶端發送原始的 HTTP 報頭。
認識到一點很重要,即必須在任何實際的輸出被發送之前調用 header() 函數(在 PHP 4 以及更高的版本中,您可以使用輸出緩存來解決此問題):
// 結果出錯, 在調用 header() 之前已存在輸出
// 請務必保證, 在調用 header() 之前沒有任何輸出, 即沒有echo, print, printf, var_dump等
header('Location: http://www.mimvp.com');
?>
header() 語法
header(string, replace, http_response_code)
參數
描述
string
必需。規定要發送的報頭字符串。
replace
可選。指示該報頭是否替換之前的報頭,或添加第二個報頭。
默認是 true(替換)。false(允許相同類型的多個報頭)。
http_response_code
可選。把 HTTP 響應代碼強制為指定的值。(PHP 4 以及更高版本可用)
注釋:從 PHP 4.4 之后,該函數防止一次發送多個報頭,這是對頭部注入攻擊的保護措施。
header()函數的第一個參數 string 有兩種特別的頭:
第一種以“HTTP/”開頭的 (case is not significant,不區分大小寫),將會被用來計算出將要發送的HTTP狀態碼。
例如,在 Apache 服務器上用 PHP 腳本來處理不存在文件的請求(使用?ErrorDocument?指令), 就會希望腳本響應了正確的狀態碼。
示例1:
header("HTTP/1.0 404 Not Found");
?>
第二種特殊情況是“Location:”的頭信息。
它不僅把報文發送給瀏覽器,而且還將返回給瀏覽器一個?REDIRECT(302)的狀態碼,除非狀態碼已經事先被設置為了201或者3xx。
header("Location: http://www.mimvp.com/"); /* Redirect browser */
/* Make sure that code below does not get executed when we redirect. */
exit;
?>
replace
可選參數?replace?表明是否用后面的頭替換前面相同類型的頭。 默認情況下會替換。如果傳入?FALSE,就可以強制使相同的頭信息并存。例如:
header('WWW-Authenticate:?Negotiate');
header('WWW-Authenticate:?NTLM',?false);
?>
http_response_code
強制指定HTTP響應的值。注意,這個參數只有在報文字符串(string)不為空的情況下才有效。
示例2:
// Date in the past
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Cache-Control: no-cache");
header("Pragma: no-cache");
?>
...
...
注釋:用戶可能會設置一些選項來更改瀏覽器的默認緩存設置。
通過發送上面的報頭,您可以覆蓋任何這些設置,強制瀏覽器不進行緩存!
示例3:
提示用戶保存一個生成的 PDF 文件(Content-Disposition 報頭用于提供一個推薦的文件名,并強制瀏覽器顯示保存對話框):
header("Content-type:application/pdf");
// 文件將被稱為 downloaded.pdf
header("Content-Disposition:attachment;filename='downloaded.pdf'");
// PDF 源在 original.pdf 中
readfile("original.pdf");
?>
...
...
注釋:微軟 IE 5.5 存在一個阻止以上機制的 bug,通過升級為 Service Pack 2 或更高的版本,可以解決該 bug。
參考推薦:
總結
以上是生活随笔為你收集整理的php实现页面强制跳转,PHP实现页面跳转的几种方法 - 米扑博客的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: you need a c compile
- 下一篇: 动态规划算法php,php算法学习之动态