PHP 中几种用于区分环境的方法

在项目开发过程中,我们一般至少会有三套环境:本地开发环境,测试环境、线上生产环境。而不同的环境一般它的配置文件内容是不一样的,比如环境不一样时数据库地址不一样。为了能在每次发布代码时不至于屡次改动代码来适配不同的环境,我们可以为每一套环境对应到各自的配置文件,这时就需要能有一种方法能识别当前代码所运行的环境来自动加载对应的配置文件。这样的自动识别环境的方法常用的有三种。

一、hostname

利用 php 提供的获取操作系统主机名的 gethostname 方法:

string gethostname ( void ) // PHP >= 5.3.0

这样就可以通过规范不同环境下的 hostname 来区分环境,比如:

mb_internal_encoding("UTF-8");
$hostname = gethostname();

if ($hostname == 'prod') {
    // 生产环境
} elseif ($hostname == 'test') {
    // 测试环境
} elseif ($hostname === false) {
    // 获取失败
} else {
    // 本地开发环境
}

局限:主机名长度不能超过70,超过了 gethostname 方法会获取失败。

二、php-fpm 配置环境变量

在 php-fpm 配置文件中通过其提供的配置环境变量的功能来实现:

[www]
...
env[environment] = prod
...

然后在 php 中通过 getenv、$_ENV 方法来获取:

$env = getenv('environment');
// or
$env = $_ENV['environment'];

局限:适用于 php-fpm 模式,而 CLI 模式下则无效。

三、设置操作系统环境变量

通过设置操作系统的环境变量来实现:
编辑 sudo vi /etc/profile

export environment=prod

然后在 php 中通过 $_ENV 方法来获取:

$env = $_ENV['environment'];

局限:适用于 CLI模式,而 php-fpm 模式下则无效。

结束语

第一种方法最简单,但也受到长度的限制。另外因为依赖于操作系统的主机名,当被一些原因修改了,则可能导致区分环境失败。第二种和第三种方法则建议配合一起使用,这样在 php-fpm、CLI 模式下都能被支持。