まず第一に
、includeステートメントでCookie値を直接使用しないでください。偽のCookieを作成し、アプリケーションを台無しにするのは非常に簡単です。
langという名前のCookieがないか、変数$lang
が以前に初期化されたことがないと思います。
Cookieが存在し、正しい形式であるかどうかを確認するには、次のようにします。
// set default lang code
$langCode = 'en';
// check if cookie exists and if contains string build from 2 characters from range a-z
// check also if file exists
if (isset($_COOKIE['lang'] && preg_match('/^[a-z]{2}$/', $_COOKIE['lang']) &&
file_exists(base_url().'language/lang'.$_COOKIE['lang'].'.php')) {
$langCode = $_COOKIE['lang'];
}
include base_url().'language/lang'.$langCode.'.php';
含まれているファイルで、変数$lang
が存在するかどうかを確認する必要があります
if (!isset($lang)) $lang = array();
$lang['Here'] = 'Here';
$lang['Date'] = "Date";
global
また、あなたの例からは同じスコープのように見えるので、ここで使用することは無意味だと思います。
とにかく私にとってはるかにクリーンな解決策は次のようになります:
// first_file.php
$langCode = 'en';
if (isset($_COOKIE['lang'] && preg_match('/^[a-z]{2}$/', $_COOKIE['lang']) &&
file_exists(base_url().'language/lang'.$_COOKIE['lang'].'.php')) {
$langCode = $_COOKIE['lang'];
}
$lang = include base_url().'language/lang'.$langCode.'.php';
// langen.php
return array(
'Date' => 'Date',
'Here' => 'Here',
);
編集
もう1つ-base_url()がWeb URL(http://example.comなど)を返す場合、それも間違っています(また、この方法で含めるとlangen.phpに少なくとも通知メッセージが含まれるため問題が発生する可能性があります)-有効なファイルパスに含める必要があります