【问题标题】:What is the best way to store configuration variables in PHP?在 PHP 中存储配置变量的最佳方法是什么?
【发布时间】:2010-10-10 06:09:12
【问题描述】:

我需要在 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将此配置信息导入我的应用程序。

在存储配置数据方面什么对您有用,以及这方面的最佳做法是什么?

【问题讨论】:

    标签: php configuration-files


    【解决方案1】:

    我一直选择选项 #2,只是确保除了所有者之外没有人可以访问它。它是 Joomla、vBulletin、Gallery 等 PHP 应用程序中最流行的方法。

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


    例子..

    define('EXAMPLE1', "test1"); // scenario 1
    $example2 = "test2"; // scenario 2
    
    function DealWithUserInput($input)
    {
       return eval($input);
    }
    

    现在这个代码示例真的很愚蠢,但只是一个示例。根据用户可以尝试在输入中使用的场景,考虑函数可能返回的内容。

    只有在函数中将其设为全局时,场景 2 才会导致问题。否则超出范围且无法访问。

    【讨论】:

    • 如果某些用户输入带有 MYSQL_PASSWORD 可能会与实际密码一起传递,这是否很危险?
    • 如果您遵循您列出的第二种方法,可能会发生这种情况。它本质上将其设置为全局变量,在任何范围内都可以查看。您可以选择类或函数如何访问 $config 数组,所以只要您没有在错误的范围内看到它,就可以了。
    • 已编辑帖子,以举例说明您可以在代码中定义内容的两种不同方式以及用户如何获取信息。
    • 谢谢你,我也针对我的问题发布了更多内容。
    • 无论您是否定义了常量,对用户输入进行评估都是危险的。谁能提供另一个例子来说明如何定义常量“太危险了”?
    【解决方案2】:

    我想说这也取决于用户群。如果配置必须非常用户友好或用户必须能够通过网络等更改配置。

    我为此使用Zend Config Ini,其他设置存储在 SQL DB 中。

    【讨论】:

    • 以前从未听说过这种方法。很高兴知道!
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

      • 是的,确实如此,除非您想编辑一个文件以更改任何配置数据,那么附加到 Db 类的常量将使其比单个访问点更困难(这就是我想要的)
      猜你喜欢
      • 1970-01-01
      • 2011-10-09
      • 1970-01-01
      • 2011-05-24
      • 2011-07-30
      • 2011-10-09
      • 2013-02-04
      • 2013-02-15
      • 2011-03-05
      相关资源
      最近更新 更多