首先:
你不应该直接在 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',
);
编辑
还有一件事 - 如果 base_url() 返回 Web URL(如http://example.com ...),那么它也是错误的(并且也可能导致问题,因为 langen.php 在以这种方式包含时至少包含通知消息) - 应该包含在有效的文件路径中