如何使用PHP语言将数组从一个文件传递到另一个文件? 我有一个文件与一些语言数组(语言/ langen.php):
global $lang;
$lang['Here'] = 'Here';
$lang['Date'] = "Date";
在其他文件中我有:
include base_url().'language/lang'.$_COOKIE['lang'].'.php';
var_dump($lang);
*(我的错误是应对代码 - true是var_dump($ lang))* 但它显示了一个错误:
A PHP Error was encountered
Severity: Notice
Message: Undefined variable: lang
如何解决这个问题以及我做错了什么?
答案 0 :(得分:1)
首先: 你不应该直接在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在包含此时至少包含Notice消息方式) - 应包含有效的文件路径
答案 1 :(得分:0)
不应该吗?
include base_url().'language/lang'.$_COOKIE['lang']['Here'].'.php';
否则它只会返回array()
答案 2 :(得分:0)
首先,如果你发布的代码中没有这样的东西,我没有看到var-dumping变量$ data的意义。如果您的浏览器中有一个名为“lang”的cookie,那么您应该没问题。您可以随时通过
进行检查var_dump($GLOBALS['lang']);
你的代码中的。它应该打印lang * .php文件中的值数组。