在PHP中存储配置变量的最佳方法是什么?

时间:2009-02-27 03:47:58

标签: php configuration-files

我需要在PHP中存储一堆配置信息。

我考虑过以下事项......

// Doesn't seem right.
$mysqlPass = 'password'; 

// Seems slightly better.
$config = array(
     'mysql_pass' => 'password'
);

// Seems dangerous having this data accessible by anything. but it can't be
// changed via this method.
define('MYSQL_PASSWORD', 'password'); 

// Don't know if this is such a good idea.
class Config
{
    const static MYSQL_PASSWORD = 'password';
}     

到目前为止,这是我所想到的。我打算使用require /config.inc.php将此配置信息导入我的应用程序。

对于存储配置数据有什么用处,以及有关此问题的最佳做法是什么?

4 个答案:

答案 0 :(得分:7)

我总是选择#2选项,只是确保除了拥有者之外没有人可以访问它。它是Joomla,vBulletin,Gallery等众多PHP应用程序中最受欢迎的方法。

第一种方法对我来说太混乱(可读性),第三种方法太危险了。我从来没有想过Class方法,所以其他人可以提供他们的输入。但是我觉得只要在课堂上使用正确的访问权限就可以了。


实施例..

define('EXAMPLE1', "test1"); // scenario 1
$example2 = "test2"; // scenario 2

function DealWithUserInput($input)
{
   return eval($input);
}

现在这个代码示例真的很愚蠢,但只是一个例子。考虑函数可以返回的内容,具体取决于用户可以尝试在其输入中使用的场景。

如果您在函数中将其设置为全局,则场景2只会导致问题。否则它超出范围且无法访问。

答案 1 :(得分:4)

我会说它还取决于用户群。如果配置必须非常用户友好,或者用户必须能够通过网络等更改配置。

我使用Zend Config Ini进行此操作,其他设置存储在SQL DB中。

答案 2 :(得分:1)

我通常使用第二种方法......在处理数据库连接时,我通常在请求开始时打开一个连接,然后在结束时关闭它。我有一个建立连接的函数,然后从全局数组中删除用户名/密码(使用unset()函数),这可以防止系统的其他部分访问“敏感”的mysql连接数据。

答案 3 :(得分:0)

对于大多数配置值,我也使用选项2。如果 要实现Class,那么我会将特定值绑定到它影响的Class而不是一般的配置类。

在您的示例中,您的类将用于数据库连接,并且实例将保存密码,db_name等。这将正确封装数据,并且如果需要,还提供创建多个连接的简单方法。