php header(location)容易被忽略小問題——exit
阿新 • • 發佈:2019-02-04
在header跳轉後使用exit
PHP的header可以輸出http頭部資訊,前提是,在header之前不能輸出任何內容,因為所有的內容都作為http的body輸出給客戶端了,一旦有body的內容,就不可能再新增任何head部分的資訊。
header函式的一個常用的方式就是用來做轉向,redirect。
比如,我需要轉到某個地址,只要執行下述程式碼:
- header('Location: http://write.blog.csdn.net');
瀏覽器會收到一個302的http狀態碼,告訴他這個內容已經被轉移了。
重要的是,php會在呼叫header函式後,繼續執行後面的程式碼,你可以用我的程式碼親自試驗一下:
- header('Location: http://www.nowamagic.net/');
- $fp = fopen('header.txt', 'w+');
- fwrite($fp, date('Y-m-d H:i:s'));
肯定會執行到fwrite函式的,開啟header.txt檔案,檢查時間!
對此,解決的辦法是,要在每一個header函式後面加上exit,保證當前頁面停止執行,進而轉向location指定的地址。
為了避免到處都是exit,可以寫一個專門用作轉向的函式,比如:
- function Redirect($strUrl) {
-
header('Location: '
- exit;
- }
另,為了避免在header之前輸出body的內容,許多php框架都採用了php頁面尾部不寫?>的方式,因為有些人總習慣在?>後面新增一個換行,這真的是個不好的習慣。