2015-04-03 67 views
2

用define()存储数据库连接细节是好还是不好?用define()存储数据库连接细节是好还是不好?

define('DB_HOST', 'localhost'); 
define('DB_USER', 'root'); 
define('DB_PASS', 'xxx'); 
define('DB_NAME', 'xxx'); 

或更好的数组下面?

$config['db'] = array(
    'driver' => 'mysql', 
    'host'  => 'localhost', 
    'port'  => '3306', 
    'user'  => 'someuser', 
    'password' => 'SuperSecretPassword', 
    'name'  => 'db_name', 
); 

我注意到,流行的框架,比如Zend或Symfony的不使用定义此配置。

笨,

$db['default']['hostname'] = 'localhost'; 
$db['default']['username'] = ''; 
$db['default']['password'] = ''; 
$db['default']['database'] = ''; 
... 

什么利于存放在数组中,而不是define()?我注意到Zend出现并不是使用define()(我可能是错的,因为我是Zend的新手)。 难道存储somme 全球contants然后一般吗?

在我有限的知识,我确实发现存储一些全球contants有用的,例如,我可以存储我的文档根在这下面,然后我可以从任何地方访问它 - 只要使用WEBSITE_DOCROOT

define ('WEBSITE_DOCROOT', str_replace('\\', '/', dirname(__FILE__)).'/'); 

不像这种方法低于我必须使用dirname(__FILE__)每次,

// Load config file 
$configFile = dirname(__FILE__) . '/../share/config/default.php'; 

,我可以只使用WEBSITE_DOCROOT . '/../share/config/default.php';调用文件。这不是更容易和一致吗?

+2

'define'创建一个常量。常量不能改变它们的值。变量可以随时更改其值。通过这个定义,常数的好处在于,你知道它一旦被设置就不会被搞砸 - 它总是最初的。有了变量,你可以随时改变它们。但是,您不能像遍历数组那样迭代常量。当人们不笨并且知道他们在做什么时,他们可以同时使用两者。相互之间没有什么巨大的优势,它归结为你认为更容易和更清洁的工作。 – 2015-04-03 08:26:06

+1

我强烈建议您使用[dotenv](https://github.com/bkeepers/dotenv)这种方式来确保您的凭证得到了相当的保护。 – 2015-04-03 08:27:51

回答

2

使用define而不是array没有限制。 对于数据库连接功能,框架使用arrays,因为他们想要有一些optional参数,如encoding。另一个原因是没有必要define这些常量,并为他们节省内存,而你只需要他们一次(在bootstrap.php)。 define的想法是在任何地方访问const,但对于数据库配置,您并不需要它。

*最好将数据库配置存储在read-onlynot executable权限为apache的文件中,并拒绝其他用户的所有访问。所以这个文件不能是一个PHP文件。你可以使用xmlini或其他标准格式

+0

感谢您的答案。我可以问 - 我怎样才能配置一个文件只读,而不是可执行的权限的Apache和拒绝从其他用户的所有访问? – oasis 2015-04-03 13:34:29

+0

你应该将apache设置为拥有者并将权限设置为600.你可以用终端或你的cpanel来实现。 在终端运行这两个命令 'chown apache:apache/path/to/the/config/file' 'chmod 400/path/to/the/config/file' 如果您没有访问终端,转到cpanel->文件管理器,并更改目录配置文件,并更改它的权限 – 2015-04-03 13:54:48

+0

得到它。谢谢!所以我不能这样做的PHP文件? – oasis 2015-04-03 13:58:07

1
  • 在你的应用程序中使用常量对于存储base-url之类的信息非常有用,我真的看不出有什么理由不使用它们,那就是它们的目的。
  • 使用,而不是一个数组偏好和设计(架构)的问题,大多数的框架使用数组的原因是,它是简单地使用阵列(显然)
  • 这不是坏的,使用更方便存储数据一个全局常量,如果你发现它对你有用,那么通过一切手段来利用它,我可以想象到,你会明白为什么其他人更喜欢数组方法。

但为了保证您的安全凭证,我建议使用dotenv 我认为这是可能做到这一点的最好办法。

祝你好运。

+0

感谢您的答案。我现在感觉更好地使用常量。肯定会考虑'dotenv'。谢谢。 – oasis 2015-04-03 08:46:51

+0

'dotenv'是用Ruby编写的。我们如何在PHP中使用Ruby? – oasis 2015-04-03 08:51:24

+1

对不起,我的坏,这里是PHP版本:[dotenv](https://github.com/vlucas/phpdotenv) – 2015-04-03 09:22:30

1

配置和参数必须设置你的PHP项目之外
你必须记住,这样的工作可以由一个人,是不是开发者来管理,一无所知关于PHP编程
使用什么标准为此:像XML,属性或conf文件

相关问题