【问题标题】:Is it good or bad to store the DB connection details with define()?使用define() 存储数据库连接详细信息是好是坏?
【发布时间】:2015-04-03 08:21:48
【问题描述】:

用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'; 来调用文件。这不是更容易和一致吗?

【问题讨论】:

  • define 创建一个常量。常量不能改变它们的值。变量可以随时更改其值。根据这个定义,常量的优点是你知道它一旦设置就不会被搞砸——它总是最初的样子。使用变量,您可以随时更改它们。但是,您不能像遍历数组那样迭代常量。当人们不笨并且知道自己在做什么时,他们可以同时使用两者。没有一个比另一个大的优势,它归结为你认为更容易和更清洁的工作。
  • 我强烈建议您使用dotenv 这样您就可以放心地确保您的凭据受到相当的保护。

标签: php codeigniter symfony zend-framework constants


【解决方案1】:

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

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

【讨论】:

  • 感谢您的回答。请问-如何配置a file with read-only and not executable permission for apache and deny all access from other users
  • 你应该设置 apache 为所有者和权限为 600。你可以用终端或你的 cpanel 来做。在终端中运行这两个命令chown apache:apache /path/to/the/config/filechmod 400 /path/to/the/config/file 如果您无法访问终端,请转到 cpanel-> 文件管理器并将目录更改为 configs 文件并更改其权限
  • 不客气。不,您不能使用 php 更改权限,权限应由操作系统授予/拒绝。
【解决方案2】:

必须在 PHP 项目之外设置配置和参数
您必须记住,这类工作可以由对​​ PHP 编程一无所知的非开发人员来管理
为此使用一些标准:如 XML、属性或 conf 文件

【讨论】:

    【解决方案3】:
    • 在整个应用程序中使用常量可能非常适合存储诸如 base-url 之类的信息,我真的看不出有什么理由不使用它们,这就是它们的目的。
    • 使用数组代替是偏好和设计(架构)问题,大多数框架使用数组的原因是使用数组存储数据更方便(显然)
    • 使用全局常量一点也不差,如果你觉得它对你有用,那么一定要用它来为你所用,我可以想象,随着时间的推移,你会明白为什么其他人更喜欢数组方法。

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

    祝你好运。

    【讨论】:

    • 感谢您的回答。我现在使用常量感觉好多了。肯定会调查dotenv。谢谢。
    • dotenv 是用 Ruby 编写的。我们如何在 PHP 中使用 Ruby?
    • 对不起,我的错,这里是 PHP 版本:dotenv
    • 只是快速浏览一下,但不确定如何使用它——它缺乏可靠的例子......例如,我如何使用dotenv 存储我的数据库详细信息以及如何访问什么我已经储存了?
    • 您阅读文档了吗?这真的很简单。我建议您使用 composer 下载它并查看您使用此软件包获得的示例文件。我相信你会弄清楚的。
    猜你喜欢
    • 1970-01-01
    • 2010-11-19
    • 1970-01-01
    • 2013-12-16
    • 1970-01-01
    • 2013-06-13
    • 2013-08-21
    • 2014-09-03
    • 1970-01-01
    相关资源
    最近更新 更多