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

时间:2015-04-03 08:21:49

标签: php codeigniter symfony zend-framework constants

使用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等流行的框架不使用define来配置此配置。

笨,

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

将其存储在数组而不是define()中的好处是什么?我注意到Zend出现完全使用define()(我可能错了,因为我是Zend的新手)。 是不是存储somme 全球范围然后一般?

在我有限的知识中,我确实发现存储了一些有用的全局内容,例如,我可以将我的文档根存储在下面,然后我可以从任何地方访问它 - 只需使用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';来调用该文件。是不是更容易和一致?

3 个答案:

答案 0 :(得分:2)

使用define代替array没有限制。 框架使用arrays作为数据库连接函数,因为它们希望有optionalencoding参数。另一个原因是,在你只需要它们一次时(在bootstrap.php),不需要define这些consts并为它们节省内存。 define的想法是到处访问const,但是对于数据库配置,你不需要它。

*最好将数据库配置存储在read-only的{​​{1}}和not executable权限的文件中,并拒绝其他用户的所有访问权限。所以这个文件不能是一个php文件。您可以使用apachexml或其他标准格式

答案 1 :(得分:1)

  • 在整个应用程序中使用常量对于存储base-url等信息非常有用,我真的看不出任何使用它们的理由,这是他们的目的。
  • 使用数组是一个偏好和设计(架构)的问题,大多数框架使用数组的原因是使用数组存储数据更方便(显然)
  • 使用全局常量并不坏,如果你发现它对你有用,那么一定要用它来造福你,我可以想象,及时,你会理解为什么其他人更喜欢这个数组方法

但是,为了确保您的凭据安全,我建议使用dotenv 我认为这可能是最好的方法。

祝你好运。

答案 2 :(得分:1)

必须在PHP项目之外设置配置和参数 您必须记住,这种工作可以由不是开发人员的人管理,对PHP编程一无所知 使用标准的东西:如XML,属性或配置文件