我們很常用的一個寫法
header("Location: http://plog.longwin.com.tw/");
這個寫法基本上沒有什麼問題, 但是寫在 function 裡面就有些問題寫了, 詳見下述說明.
先簡單說結論就是:
若要寫成 function, 在 heade Location 下面要加 exit, 否則最好就不要寫成 function 來呼叫.
以下用個簡單範例來說明一下:
function redirect($url) { header("Location: $url"); return True; } if('xxx' == $data) { redirect($url); } ..... 一些資料流程 .... header("Location: $url2");
假設是上面的這支程式, 中間沒有吐出任何字, 只是純處理資料, 照理說我們想要在 $data='xxx' 的狀況下做 redirect 到 $url 去, 但是最後程式跑下來會變成跑到 $url2 去.
主要原因就是我沒有在 function 裡面做 exit; 的動作, 他的實際流程會跑如下述:
- 判斷 $data == 'xxx'
- redirect 到 $url 去, 然後實際已經導過去了.
- 但是此程式因為是 function, 只是呼叫, 呼叫完程式會繼續往下做.
- 程式跑到下面看到要 redirect 到 $url2 去, 於是再次將 url 導到 $url2 去.
簡單說就是, function 呼叫如果沒有給他結束, 那程式的基本流程還是會繼續做到完, 若有其它導向, 就會跟著被導到非預期的地方去.
所以 redirect 的 function 寫法要加 exit 比較保險, 如下範例:
function redirect($url) { header("Location: $url"); exit; }