在通過php的header('Location:http://www.111cn.net')做跳轉時.有時會不成功.追其原因有以下幾種情況:
寫法錯誤
•location和“:”號間不能有空格,否則會出錯。
•在用header()前不能有任何的輸出。
•header後的PHP代碼還會被執行,所以在函數之前最好加上exit()來停止之後程式的執行
另外還有一個問題,算是比較低級了
編碼報錯
| 代碼如下 |
複製代碼 |
<?php header("location:http://www.111cn.net/"); ?> |
要求header前沒有任何輸出,否則會報錯。
當我們以 ANSI 格式編碼時(多數預設情況),可以正常實現PHP跳轉。
| 代碼如下 |
複製代碼 |
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
有時我們需要在網頁中事先判斷跳轉條件,如果符合則正常顯示網頁,而網頁是以 UTF-8 格式編碼,此時使用header則會報錯。
原因是 UTF-8 編碼在文本開始處偷偷地輸出了三個字元(BOM),預設對我們不可見。因此不滿足“header前沒有任何輸出”的條件,從而報錯。
解決方案是使用Notepad++等文字編輯器開啟檔案,轉為 UTF-8 無 BOM 編碼格式,儲存退出即可。
PHP header 預設302臨時重新導向,如需要使用301永久重新導向,可使用以下代碼。
| 代碼如下 |
複製代碼 |
<?php header("HTTP/1.1 301 Moved Permanently"); header("Location: http://feitsui.net/"); ?>
|
如果不關注HTTP狀態,可以使用JavaScript實現跳轉。
| 代碼如下 |
複製代碼 |
<script type="text/javascript"> window.location.href="http://www.111cn.net/"; </script> |
三,順序問題
| 代碼如下 |
複製代碼 |
<?php if(1){ header("Location:http://www.baidu.com/"); } header("Location:01.php"); header("Location:03.php"); header("Location:http://www.sina.com"); echo "111"; header("Location:http://www.g.cn"); echo "222"; header("Location:http://www.163.cn"); echo "333"; ?> |
如上代碼為什麼不跳轉到header("Location:http://www.baidu.com/");?
另外一個問題伺服器讀PHP檔案,是讀一點發送給用戶端一點,還是一次讀完後,才發送給客戶.Javascript是怎麼個讀法?
php指令碼是從上往下是順序讀的,在伺服器端一次性讀完以後發給用戶端,這個檔案,當讀到if時本應該發送header("Location:http://www.baidu.com/");但是下面還有header("Location:01.php");
header("Location:03.php");
header("Location:http://www.sina.com");就會繼續讀到最後一條而echo的優先順序低於低於header,當很多個header並列時就會把最後一條顯示,就像顯示數組一樣,$forum[],當你寫 echo $forum就只會把數組中的最後一條記錄顯示。javascript是用戶端指令碼,當你的頁面下載後以後所有的javascript指令檔就已經在你的電腦裡面了,只有對其操作時才會有響應。