失业两个月找存在感系列——几行代码实现Laravel加载不同的 .env 环境文件,进而多环境部署

一套代码多环境部署

在实际开发中,为了减少线上bug。往往需要部署多套环境,一般来讲最低配也是测试环境和正式环境。如何区别两种环境进而加载不同环境下的配置文件呢,通常有两种做法。

  • 在CICD时进行执行不同环境的部署脚本,脚本中选择对应环境下的 环境配置文件进行覆盖到真实要加载的位置。类似于下面
      mv prod.env    .env
  • 设置环境变量,代码中通过获取环境变量的值是测试test还是正式prod,进而加载对应的配置文件,通常有两种方式设置环境变量,在服务器层面或者PHP配置环境层面

Laravel通过环境变量实现

  • 修改php配置文件增加php的环境变量

       LAJUN_PHP_ENV = 'prod'
  • 增加.env配置文件目录

    失业两个月无聊找存在感系列《几行代码实现Laravel加载不同的 .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 协议》,转载必须注明作者和本文链接
PHP是世界上最好的编程语言,它能快速的进行技术变现,让代码多一份价值。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 8

默认是支持的。

9个月前 评论
PHP之父一只码 (楼主) 9个月前

laravel 是支持根据环境变量加载不同的.env.xxx文件的,可以看看这个源码

9个月前 评论

file

看代码是可以在项目根目录下放不同的配置文件, 比如 .stg ,在服务器上需要设置 PHP_ENV=stg,如果命令行模式下 --env 的值优先级高于 PHP_ENV

9个月前 评论

Laravel 应该只要再 php.ini 加一个 env.APP_ENV=local 就行, 以下为 ChatGpt 的回答。

在 PHP 中,$_ENV 变量包含了当前进程执行上下文中的环境变量。可以通过 php.ini 文件配置环境变量。

要配置环境变量,您需要编辑 php.ini 文件,并添加以下行:

env.name=value

其中,name 是环境变量的名称,value 是环境变量的值。例如,要设置名为 DATABASE_URL 的环境变量,您可以添加以下行:

env.DATABASE_URL=mysql://user:password@hostname/database_name

编辑 php.ini 文件之后,您需要重启 PHP 服务器才能使更改生效。重启后,您可以使用以下代码在 PHP 中获取环境变量:

php
$databaseUrl = getenv('DATABASE_URL');

此代码将获取名为 DATABASE_URL 的环境变量,并将其值分配给 $databaseUrl 变量。

9个月前 评论
徵羽宫 (作者) 9个月前

getenv() 是一个 PHP 函数,用于获取环境变量的值。这些环境变量通常在操作系统层面设置,并在 PHP 进程启动时被加载。

如果你想要在 PHP 脚本中设置一个环境变量并通过 getenv() 获取,可以使用 putenv() 函数。例如:

putenv("MY_VARIABLE=my value");
echo getenv("MY_VARIABLE"); // 输出 "my value"

注意,通过 putenv() 设置的环境变量只在当前 PHP 进程中有效,如果 PHP 脚本执行结束或者进程结束,这些环境变量就会被清除。另外,这些环境变量不会影响到其他 PHP 进程或者操作系统的其他进程。

如果你想设置一个对所有 PHP 进程都有效的环境变量,你需要在操作系统层面设置。这通常涉及到编辑系统的环境配置文件(比如 bash 的 .bashrc.bash_profile 文件),或者在启动 PHP 进程的命令行中设置环境变量。例如,在 bash shell 中,可以这样设置环境变量:

export MY_VARIABLE="my value"

然后,你可以在任何 PHP 脚本中使用 getenv() 获取这个环境变量的值:

echo getenv("MY_VARIABLE"); // 输出 "my value"

注意,这样设置的环境变量只在当前的 shell 会话中有效。如果你想要设置一个永久的环境变量,需要将 export 命令添加到 .bashrc.bash_profile 文件中。

以上是在 UNIX-like 系统(如 Linux 或 MacOS)中设置环境变量的方法。如果你使用的是 Windows,设置环境变量的方法可能会有所不同。

9个月前 评论
PHP之父一只码 (作者) (楼主) 9个月前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
UFO @ 一只码科技
文章
9
粉丝
36
喜欢
77
收藏
174
排名:506
访问:1.6 万
私信
所有博文
社区赞助商