利用PHP的header()函數,可以實現頁面跳轉,如
但它有個缺點,一旦HTTP報頭區塊已經發送,就不能使用header() 函數,來發送其它的標頭。 這時候只能利用前端HTML或JS技術來實現頁面跳轉了!
怎麼知道HTTP報頭區塊已經傳送了呢?
PHP的 headers_sent() 函數,可以幫忙。
PHP headers_sent() 函數
headers_sent() 函數檢查 HTTP 標頭是否已被傳送以及在哪裡被傳送。
如果報頭已傳送,則傳回 true,否則傳回 false。
語法
headers_sent(file,line)
參數
描述 |
。 | 如果設定 file 和 line 參數,headers_sent() 會把輸出開始的 PHP 原始檔名和行號存入 file 和 line 變數中。
|
提示和註釋
| 註釋:一旦報頭區塊已經發送,就不能使用 header() 函數 來發送其它的標頭。使用此函數至少可以避免與 HTTP 標頭相關的錯誤訊息。
註解:可選的 file 和 line 參數是 PHP 4.3 中新增的。
例子1
1
<?php
| <?php |
// 如果報頭未發送,則發送一個
(!
4
header( |
"Location : http://www.w3school.com.cn/" );
|
01
<?php |
// 傳遞$file 和$line,日後使用 |
if
(!headers_sent(
$file
,
05 w3school.com.cn/"
| 07
|
// Trigger an error here
echo
"Headers sent in $file on line $line";
|
10 |
12
/**
03
* @param string $url 跳轉位址 |
| :秒)
| 05
* @param string $msg 提示語
|
*/
functionredirect( | $url
,
$time = 0, $msg = '' ) {
) {
|
) {
$url = |
str_replace ( array ( "n" ,
"r" ), '' ,
$url ); // 多行URL位址支援
|
(
empty
(
$msg
)) {
|
10 "系統將在{$time}秒之後自動跳到{$url} ! " ;
|
11
|
12
if |
(headers_sent() ) {
15 |
$strstr $strstr .= <code> $msg
|
;
(
) 20
header( "Location: " | . $url );
|
else
"Content-type: text/html; charset=utf-8"
23
|
header( "refresh:{$time};url={$url}" );
|
}
} |
以上就介紹了php重定向網頁,包括了方面的內容,希望對PHP教程有興趣的朋友有幫助。
|