用 define() 存储数据库连接细节是好是坏?
Is it good or bad to store the DB connection details with 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 等流行框架不使用 define 进行此配置。
CodeIgniter,
$db['default']['hostname'] = 'localhost';
$db['default']['username'] = '';
$db['default']['password'] = '';
$db['default']['database'] = '';
...
将其存储在数组中而不是 define()
有哪些好处?我注意到 Zend 似乎 根本没有 使用 define()
(我可能是错的,因为我是 Zend 的新手)。 一般来说,存储一些全局常量不好吗?
以我有限的知识,我确实发现存储一些全局常量很有用,例如,我可以将我的文档根目录存储在下面,然后我可以从任何地方访问它 - 只需使用 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';
调用该文件。是不是更简单和一致?
- 在整个应用程序中使用常量可能非常适合存储像 base-url 这样的信息,我真的看不出有什么理由不使用它们,这就是它们的目的。
- 改用数组是偏好和设计(架构)问题,大多数框架使用数组的原因是使用数组存储数据更方便(显然)
- 使用全局常量一点也不坏,如果你觉得它对你有用,那么一定要用它来为你带来好处,我可以想象,随着时间的推移,你会明白为什么其他人更喜欢数组方法。
但是,为了保证您的凭据安全,我建议使用 dotenv
我认为这可能是最好的方法。
祝你好运。
必须在您的 PHP 项目之外设置配置和参数
您必须记住,这种工作可以由非开发人员管理,对 PHP 编程一无所知
为此使用一些标准的东西:比如 XML、属性或 conf 文件
没有限制使用 define
而不是 array
。
框架将 arrays
用于数据库连接函数,因为它们希望有一些 optional
参数,例如 encoding
。另一个原因是不需要 define
这些常量并为它们节省内存,而你只需要它们一次(在 bootstrap.php)。 define
的想法是到处访问 const,但对于数据库配置,您不需要它。
*最好将数据库配置存储在具有 read-only
和 not executable
权限的文件中 apache
并拒绝其他用户的所有访问。所以这个文件不能是 php 文件。您可以使用 xml
、ini
或其他标准格式
用 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 进行此配置。
CodeIgniter,
$db['default']['hostname'] = 'localhost';
$db['default']['username'] = '';
$db['default']['password'] = '';
$db['default']['database'] = '';
...
将其存储在数组中而不是 define()
有哪些好处?我注意到 Zend 似乎 根本没有 使用 define()
(我可能是错的,因为我是 Zend 的新手)。 一般来说,存储一些全局常量不好吗?
以我有限的知识,我确实发现存储一些全局常量很有用,例如,我可以将我的文档根目录存储在下面,然后我可以从任何地方访问它 - 只需使用 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';
调用该文件。是不是更简单和一致?
- 在整个应用程序中使用常量可能非常适合存储像 base-url 这样的信息,我真的看不出有什么理由不使用它们,这就是它们的目的。
- 改用数组是偏好和设计(架构)问题,大多数框架使用数组的原因是使用数组存储数据更方便(显然)
- 使用全局常量一点也不坏,如果你觉得它对你有用,那么一定要用它来为你带来好处,我可以想象,随着时间的推移,你会明白为什么其他人更喜欢数组方法。
但是,为了保证您的凭据安全,我建议使用 dotenv 我认为这可能是最好的方法。
祝你好运。
必须在您的 PHP 项目之外设置配置和参数
您必须记住,这种工作可以由非开发人员管理,对 PHP 编程一无所知
为此使用一些标准的东西:比如 XML、属性或 conf 文件
没有限制使用 define
而不是 array
。
框架将 arrays
用于数据库连接函数,因为它们希望有一些 optional
参数,例如 encoding
。另一个原因是不需要 define
这些常量并为它们节省内存,而你只需要它们一次(在 bootstrap.php)。 define
的想法是到处访问 const,但对于数据库配置,您不需要它。
*最好将数据库配置存储在具有 read-only
和 not executable
权限的文件中 apache
并拒绝其他用户的所有访问。所以这个文件不能是 php 文件。您可以使用 xml
、ini
或其他标准格式