Php 使用include将数组从一个文件传递到另一个文件
如何使用包含PHP语言将数组从一个文件传递到另一个文件? 我有一个带有某种语言数组(language/langen.php)的文件: 在其他文件中,我有:Php 使用include将数组从一个文件传递到另一个文件,php,include,Php,Include,如何使用包含PHP语言将数组从一个文件传递到另一个文件? 我有一个带有某种语言数组(language/langen.php)的文件: 在其他文件中,我有: include base_url().'language/lang'.$_COOKIE['lang'].'.php'; var_dump($lang); *(我应对代码的错误-正确的是var_dump($lang))* 但它告诉我一个错误: A PHP Error was encountered Severity: Notice Messa
include base_url().'language/lang'.$_COOKIE['lang'].'.php';
var_dump($lang);
*(我应对代码的错误-正确的是var_dump($lang))*
但它告诉我一个错误:
A PHP Error was encountered
Severity: Notice
Message: Undefined variable: lang
如何解决这个问题?我做错了什么?不应该吗
include base_url().'language/lang'.$_COOKIE['lang']['Here'].'.php';
否则它只会返回array(),不是吗
include base_url().'language/lang'.$_COOKIE['lang']['Here'].'.php';
或者它只返回array()首先,如果您发布的代码中没有这样的内容,我看不出var转储变量$data有什么意义。如果您的浏览器中有一个名为“lang”的cookie,那么您应该很好。你可以随时检查这个
var_dump($GLOBALS['lang']);
在你的代码中。它应该打印lang*.php文件中的值数组。首先,如果您发布的代码中没有这样的内容,我看不出var转储变量$data有什么意义。如果您的浏览器中有一个名为“lang”的cookie,那么您应该很好。你可以随时检查这个
var_dump($GLOBALS['lang']);
在你的代码中。它应该打印lang*.php文件中的值数组。首先:
千万不要在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(如…),那么它也是错误的(也可能导致问题,因为langen.php以这种方式包含时,至少会包含通知消息)-首先应包含在有效的文件路径中: 千万不要在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(如…),那么它也是错误的(也可能导致问题,因为langen.php以这种方式包含时至少会包含通知消息)-应该包含在有效的文件路径中我想您的浏览器中没有类似“lang”的cookie。这就是他所说的。试试echo$\u COOKIE['lang']自己看看。我想你的浏览器中没有像“lang”这样的COOKIE。这就是他所说的。请尝试
echo$\u COOKIE['lang']
并亲自查看。在$\u COOKIE['lang']中,我输入了php将包含的语言文件的值。当我打印r($_COOKIE['lang'])时,它给我一个值1,它是语言文件(lang1.php)的名称。在$_COOKIE['lang']中,我把php将包含的语言文件的值放入。当我打印_r($_COOKIE['lang'])时,它给了我一个值1,它是语言文件的名称(lang1.php).var_dump($GLOBALS['lang']);它不会将lang*.php中的值打印给我。它只显示了一个错误:“遇到PHP错误严重性:注意消息:未定义索引:lang”。我把它放在include文件之后。把它放在include文件之后是很正确的,但是如果你不能包含你的文件,那么就不会打印任何东西,相信我。如果您直接包含您的文件(没有此cookie行?),是否打印出一些内容。我模拟了这种情况,在我这方面效果很好。您的代码中(在这些行之上)是否有您没有告诉我们的东西,这可能会导致此类问题;它不会将lang*.php中的值打印给我。它只显示了一个错误:“遇到PHP错误严重性:注意消息:未定义索引:lang”。我把它放在include文件之后。把它放在include文件之后是很正确的,但是如果你不能包含你的文件,那么就不会打印任何东西,相信我。如果您直接包含您的文件(没有此cookie行?),是否打印出一些内容。我模拟了这种情况,在我这方面效果很好。你的代码中(在这些行上面)没有告诉我们什么,这可能会导致这样的问题吗?嘿,“首先”这行是我的:]另一方面,你的更干净的解决方案确实值得+1。嘿,对不起,看起来我们的方向是一样的;)“还有一件事——如果base_url()返回web url(如),那么它也是错误的(也可能导致问题,因为langen.php以这种方式包含时,至少会包含通知消息)——应该包含在有效的文件路径中”——这解决了我的错误。当我更改include_url().'language/lang.$langCode..php';包括'language/lang.$langCode..php';很好!非常感谢卢帕图斯!嘿,那句“首先”是我的:]另一方面,你的清洁解决方案确实值得+1。嘿,对不起,看起来我们的方向是一样的;)“还有一件事——如果base_url()返回web url(如),那么它也是错误的(也可能导致问题,因为langen.php以这种方式包含时,至少会包含通知消息)——应该包含在有效的文件路径中”——这解决了我的错误。当我更改include_url().'language/lang.$langCode..php';包括'language/lang.$langCode..php';很好!非常感谢卢帕图斯!