使用include将数组从一个文件传递到另一个文件

时间:2012-11-28 22:07:03

标签: php include

如何使用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

如何解决这个问题以及我做错了什么?

3 个答案:

答案 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文件中的值数组。