1

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

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

4

3 回答 3

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 在以这种方式包含时至少包含通知消息) - 应该包含在有效的文件路径中

于 2012-11-28T22:56:28.370 回答
0

首先,如果您发布的代码中没有这样的东西,我看不到 var-dumping 变量 $data 的意义。如果您的浏览器中有一个名为“lang”的 cookie,那么您应该没问题。你可以随时检查这个

var_dump($GLOBALS['lang']);

在你的代码中。它应该打印 lang*.php 文件中的值数组。

于 2012-11-28T22:43:54.083 回答
0

不应该吗?

include base_url().'language/lang'.$_COOKIE['lang']['Here'].'.php';

否则它只会返回 array()

于 2012-11-28T22:25:51.037 回答