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

问题描述 投票:0回答:4

我需要在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
4个回答
7
投票

我总是选择选项#2,并确保除了所有者之外没有人可以对其进行任何形式的访问。它是 Joomla、vBulletin、Gallery 等 PHP 应用程序中最流行的方法。

第一种方法对我来说太混乱了(可读性),第三种方法太危险了。我从未考虑过 Class 方法,因此其他人可以提供有关该方法的意见。但我想只要在类的使用上使用正确的访问权限就可以了。


示例..

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

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

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

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


4
投票

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

我使用 Zend Config Ini 来实现此目的,其他设置存储在 SQL DB 中。


1
投票

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


0
投票

对于大多数配置值,我也使用选项 2。如果您要实现该类,那么我会将特定值与其影响的类联系起来,而不是一般的配置类。 在您的示例中,您的类将用于数据库连接,并且实例将保存密码、db_name 等。这将正确封装数据,并提供一种简单的方法来创建多个连接(如果需要)。

© www.soinside.com 2019 - 2024. All rights reserved.