読者です 読者をやめる 読者になる 読者になる

恥知らずのウェブエンジニア -web engineer, shameless

これは一歩を踏み出すことができない者たちのブログ

Codeigniterのredirectでexitするしない

勉強になったので、メモ。

今まで自分の中の認識だとredirectを行うとその後の処理をすっ飛ばして、
redirect先に飛ばされると思っていたのですが、実はそうではないとのこと。

今、業務で使っているCodeigniterのredirectのソースは↓


//**
* Header Redirect
*
* Header redirect in two flavors
* For very fine grained control over headers, you could use the Output
* Library's set_header() function.
*
* @access public
* @param string the URL
* @param string the method: location or redirect
* @return string
*/
if ( ! function_exists('redirect'))
{
function redirect($uri = '', $method = 'location', $http_response_code = 302)
{
if ( ! preg_match('#^https?://#i', $uri))
{
$uri = site_url($uri);
}

switch($method)
{
case 'refresh' : header("Refresh:0;url=".$uri);
break;
default : header("Location: ".$uri, TRUE, $http_response_code);
break;
}
exit;
}
}


Codeigniterさんexitしている!
しかし他のフレームワークや言語では必ずしもexitしているわけではなく、
redirectはheadderを書き換えているだけの場合もあるそうです。
なので、exitなしだとredirectの後ろの処理も行われて意図しない動作をするとのこと。
cake phpではオプションでexitするかしないか指定できるみたいです。
やらかす前に認識できてよかったです。



以上です。
感謝いたします。


f:id:ogataka50:20120622013638j:plain