25

我需要在 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

4 回答 4

7

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

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


例子..

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

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

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

方案 2 仅在您将其设为函数内的全局时才会导致问题。否则,它超出范围且无法访问。

于 2009-02-27T03:57:32.627 回答
4

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

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

于 2009-02-27T18:43:01.670 回答
1

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

于 2009-02-27T04:58:54.897 回答
0

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

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

于 2009-02-27T05:21:11.927 回答