0

我有这个 index.php 文件

# Loading configurations.
loadConfiguration('database');
loadConfiguration('site');

# Initializing the database connection.
$db = new database($c['db']['host'], $c['db']['username'], $c['db']['password'], $c['db']['name']);
unset($c['db']['password']);

并且 loadConfiguration() 设置如下:

function loadConfiguration($string) { require(path.'config/'.$string.'.con.php'); }

我检查了 database.con.php 和 site.con.php 是否在 config/ 文件夹中。我得到的唯一错误是通知:未定义变量:以下行中的c

$db = new database($c['db']['host'], $c['db']['username'], $c['db']['password'], $c['db']['name']);

这是database.con.php

# Ignore.
if (!defined('APP_ON')) { die('Feel the rain...'); }

$c['db']['host'] = 'localhost';
$c['db']['username'] = 'root';
$c['db']['password'] = '';
$c['db']['name'] = 'name';

这是 site.con.php

# Ignore.
if (!defined('APP_ON')) { die('Feel the rain...'); }

/* Site informations */
$c['site']['name'] = 'Namek';
$c['site']['mail'] = 'mail@whocares.com';
$c['site']['enable-email'] = false;
$c['site']['debug-mode'] = true;

我究竟做错了什么?

4

2 回答 2

0

required 代码在函数内执行,因此是$c局部变量,在全局范围内不可访问。

您可以使用一些花哨的设计模式来实现$c全局(例如,使用注册表(R::$c, R::get('c'), Environment ( $this->env->c), ...),或者您可以更改配置加载器函数以返回文件名及其require外部:

require_once configFile('database');

function configFile($name) {
    return path . 'config/' . $name . '.con.php';
}
于 2011-01-18T14:51:51.057 回答
0

请不要根据安全目的使用全局变量。您可以在注册表变量中设置变量,然后访问它。

于 2011-01-18T15:08:07.543 回答