失业两个月找存在感系列——几行代码实现Laravel加载不同的 .env 环境文件,进而多环境部署
一套代码多环境部署
在实际开发中,为了减少线上bug。往往需要部署多套环境,一般来讲最低配也是测试环境和正式环境。如何区别两种环境进而加载不同环境下的配置文件呢,通常有两种做法。
- 在CICD时进行执行不同环境的部署脚本,脚本中选择对应环境下的 环境配置文件进行覆盖到真实要加载的位置。类似于下面
mv prod.env .env
- 设置环境变量,代码中通过获取环境变量的值是测试test还是正式prod,进而加载对应的配置文件,通常有两种方式设置环境变量,在服务器层面或者PHP配置环境层面
Laravel通过环境变量实现
修改php配置文件增加php的环境变量
LAJUN_PHP_ENV = 'prod'
增加.env配置文件目录
修改app启动加载逻辑
$app = new Illuminate\Foundation\Application( $_ENV['APP_BASE_PATH'] ?? dirname(__DIR__) ); $env = get_cfg_var('LAJUN_PHP_ENV'); //获取php层面的环境变量值 define('PROJECT_ENV', $env); //定义一个全局常量标识代码环境是测试还是正式 $app->loadEnvironmentFrom('envs/.' . $env . '.env');
重启php-fpm生效
欢迎评论补充更好的方法
本作品采用《CC 协议》,转载必须注明作者和本文链接
默认是支持的。
laravel 是支持根据环境变量加载不同的.env.xxx文件的,可以看看这个源码
看代码是可以在项目根目录下放不同的配置文件, 比如 .stg ,在服务器上需要设置 PHP_ENV=stg,如果命令行模式下 --env 的值优先级高于 PHP_ENV
Laravel 应该只要再 php.ini 加一个
env.APP_ENV=local
就行, 以下为 ChatGpt 的回答。在 PHP 中,$_ENV 变量包含了当前进程执行上下文中的环境变量。可以通过 php.ini 文件配置环境变量。
要配置环境变量,您需要编辑 php.ini 文件,并添加以下行:
其中,name 是环境变量的名称,value 是环境变量的值。例如,要设置名为 DATABASE_URL 的环境变量,您可以添加以下行:
编辑 php.ini 文件之后,您需要重启 PHP 服务器才能使更改生效。重启后,您可以使用以下代码在 PHP 中获取环境变量:
此代码将获取名为 DATABASE_URL 的环境变量,并将其值分配给 $databaseUrl 变量。
getenv()
是一个 PHP 函数,用于获取环境变量的值。这些环境变量通常在操作系统层面设置,并在 PHP 进程启动时被加载。如果你想要在 PHP 脚本中设置一个环境变量并通过
getenv()
获取,可以使用putenv()
函数。例如:注意,通过
putenv()
设置的环境变量只在当前 PHP 进程中有效,如果 PHP 脚本执行结束或者进程结束,这些环境变量就会被清除。另外,这些环境变量不会影响到其他 PHP 进程或者操作系统的其他进程。如果你想设置一个对所有 PHP 进程都有效的环境变量,你需要在操作系统层面设置。这通常涉及到编辑系统的环境配置文件(比如 bash 的
.bashrc
或.bash_profile
文件),或者在启动 PHP 进程的命令行中设置环境变量。例如,在 bash shell 中,可以这样设置环境变量:然后,你可以在任何 PHP 脚本中使用
getenv()
获取这个环境变量的值:注意,这样设置的环境变量只在当前的 shell 会话中有效。如果你想要设置一个永久的环境变量,需要将
export
命令添加到.bashrc
或.bash_profile
文件中。以上是在 UNIX-like 系统(如 Linux 或 MacOS)中设置环境变量的方法。如果你使用的是 Windows,设置环境变量的方法可能会有所不同。