使用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';
来调用该文件。是不是更容易和一致?
答案 0 :(得分:2)
使用define
代替array
没有限制。
框架使用arrays
作为数据库连接函数,因为它们希望有optional
个encoding
参数。另一个原因是,在你只需要它们一次时(在bootstrap.php),不需要define
这些consts并为它们节省内存。 define
的想法是到处访问const,但是对于数据库配置,你不需要它。
*最好将数据库配置存储在read-only
的{{1}}和not executable
权限的文件中,并拒绝其他用户的所有访问权限。所以这个文件不能是一个php文件。您可以使用apache
,xml
或其他标准格式
答案 1 :(得分:1)
但是,为了确保您的凭据安全,我建议使用dotenv 我认为这可能是最好的方法。
祝你好运。答案 2 :(得分:1)
必须在PHP项目之外设置配置和参数
您必须记住,这种工作可以由不是开发人员的人管理,对PHP编程一无所知
使用标准的东西:如XML,属性或配置文件