X

PHP header Location 寫成 function 的優缺點

我們很常用的一個寫法

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; 的動作, 他的實際流程會跑如下述:

  1. 判斷 $data == 'xxx'
  2. redirect 到 $url 去, 然後實際已經導過去了.
  3. 但是此程式因為是 function, 只是呼叫, 呼叫完程式會繼續往下做.
  4. 程式跑到下面看到要 redirect 到 $url2 去, 於是再次將 url 導到 $url2 去.

簡單說就是, function 呼叫如果沒有給他結束, 那程式的基本流程還是會繼續做到完, 若有其它導向, 就會跟著被導到非預期的地方去.

所以 redirect 的 function 寫法要加 exit 比較保險, 如下範例:

function redirect($url)
{
    header("Location: $url");
    exit;
}
Tsung: 對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.
Related Post