PHP 源代码中的环境变量
你经常会在 GitHub 上看到一个项目,然后发现原始开发者留下了一个 config.php
文件,其中包含(最好的情况是)无用的数据库信息或(最坏的情况是)极其重要的 API 密钥。
当这些文件没有被意外地版本化时,它们通常会被塞进一个 .gitignore
文件中,并附带一个示例文件,供开发人员根据需要进行修改。WordPress 平台就是这样做的一个例子。
在此基础上还有一些小的改进,比如将核心配置放在一个 XML 文件中,而该文件则被埋藏在一些晦涩难懂的文档中,其中包含大量无关的配置。
我发现有两种管理 PHP 环境变量的好方法。第一种方法是将它们以 YML 等格式放在根目录下的一个文件中,然后根据需要读取这些变量。
第二种方法是由一个名为 dotenv
的库实现的,我个人更喜欢这种方法。从根本上说,我们创建了一个 .env
文件,并将其放在项目里。要从该文件中读取配置,只需调用 env()
函数即可。然后,你就可以将该文件添加到 .gitignore
文件中,这样当你从开发环境推送并拉到其他各种服务器配置时,这个过程就会变得更简单。除此之外,你还可以在网络服务器级别指定环境变量,从而确保额外的安全级别,也使管理变得更加容易。
例如,如果我的 .env
文件有 DB_HOST
属性,我就可以使用 env('DB_HOST');
访问它。
如果使用 dotenv
方法,请务必确保 .env
文件不是从文档根目录公开可见的。要么将其保留在公共 HTTP 目录之外(例如上一级目录),要么在网络服务器级别限制对其的访问(例如限制权限,或者如果使用 Apache,使用 .htaccess
文件限制对其的访问)。
在撰写本文时,只需运行以下命令即可获取并使用该库:
composer require vlucas/phpdotenv
通过使用配置文件,软代码 通常也可能成为一种反模式。这就是开始将业务逻辑放在配置文件而不是源代码中的情况;因此,值得提醒自己的是,要考虑什么时候真正需要面向配置。