最近我在使用PHP的時候碰到了一個問題,就是在使用header函數進行跳轉時,頁面并沒有跳轉,而是停留在原處。經過一番排查,我發現了問題所在,那就是關于header函數的使用規則。
首先要說明的是,header函數是PHP中一個用來發送HTTP報頭的函數,常用的作用就是進行頁面跳轉。例如,我們要實現從一個頁面跳轉到另一個頁面,就可以通過如下代碼來實現:
header("Location: newpage.php");
exit;
這段代碼的意思是,將當前頁面進行跳轉,跳轉至newpage.php頁面。但是在實際操作過程中,經常會碰到header無法跳轉的情況。下面我就來詳細講解一下這個問題。
其實,header函數無法跳轉的原因主要有兩個,一個是因為程序執行了輸出語句,導致header已經無法發送,另一個就是在header函數之前已經輸出了html代碼。下面我就分別講解一下這兩個問題。
第一個問題:程序執行輸出語句
在PHP中,header函數發送HTTP協議頭必須在任何輸出之前。如果程序在header函數之前輸出了任何東西,都會導致header發送失敗。例如,下面這段代碼就會導致header無法跳轉:echo "Hello World!";
header("Location: newpage.php");
exit;
由于程序在header函數之前輸出了“Hello World”,所以header無法發送,導致頁面無法跳轉。解決方法非常簡單,只需要將輸出語句放到header之后即可:header("Location: newpage.php");
echo "Hello World!";
exit;
第二個問題:在header函數之前已經輸出了html代碼
在代碼中,如果在header函數之前輸出了html代碼,也會出現header無法跳轉的情況。例如:My First PHP Page
由于在header函數之前已經輸出了一些html代碼,所以header無法跳轉。解決方法也非常簡單,只需要在header函數之前加上ob_start()函數即可:My First PHP Page
ob_start()函數的作用是開啟輸出緩沖,將頁面輸出暫時保存在緩沖區中,直到執行header函數之后才將其輸出到頁面上。這樣就可以避免header無法跳轉的問題啦!
總結:
在PHP中,header函數是用來發送HTTP協議頭的函數。使用header函數來進行頁面跳轉時,需要注意兩個問題:一是程序在header函數之前不能輸出任何東西;二是要在header函數之前使用ob_start()函數開啟輸出緩沖。只要能夠注意這些問題,就可以避免header無法跳轉的問題啦!