关于Lumen / Laravel .env 文件中的环境变量是如何生效的

  .env 文件包含默认环境变量,我们还可自定义其他任何有效的变量,并可通过  调用 env() 或 $_SERVER 或 $_ENV  来获取该变量。那么env()是如何加载到这些变量的呢?在Lumen的vendor/laravel/lumen-framework/src/helpers.php中,我们可以发现env函数是这样被定义的:

if (! function_exists(‘env‘)) {
    /**
     * Gets the value of an environment variable. Supports boolean, empty and null.
     *
     * @param  string  $key
     * @param  mixed   $default
     * @return mixed
     */
    function env($key, $default = null)
    {
        $value = getenv($key);

        if ($value === false) {
            return value($default);
        }

        switch (strtolower($value)) {
            case ‘true‘:
            case ‘(true)‘:
                return true;

            case ‘false‘:
            case ‘(false)‘:
                return false;

            case ‘empty‘:
            case ‘(empty)‘:
                return ‘‘;

            case ‘null‘:
            case ‘(null)‘:
                return;
        }

        if (Str::startsWith($value, ‘"‘) && Str::endsWith($value, ‘"‘)) {
            return substr($value, 1, -1);
        }

        return $value;
    }
}

可见,env函数中调用了 getenv() 来读取环境变量。我们又知道getenv()是PHP原生提供可读取   $_SERVER 或 $_ENV   全局变量的函数API,那么问题来了,.env文件中的环境变量又是如何变成 $_SERVER 或 $_ENV 变量的一部分的呢?vlucas/phpdotenv 就是这个幕后功臣,在Lumen 或 Laravel 的vendor下可以找到她,如果要单独下载她,去这里 :https://github.com/vlucas/phpdotenv 。

  PHP dotenv 她是什么?

Loads environment variables from .env to getenv(), $_ENV and $_SERVER automagically.

This is a PHP version of the original Ruby dotenv.

  Why .env?

You should never store sensitive credentials in your code. Storing configuration in the environment is one of the tenets of a twelve-factor app. Anything that is likely to change between deployment environments – such as database credentials or credentials for 3rd party services – should be extracted from the code into environment variables.

Basically, a .env file is an easy way to load custom configuration variables that your application needs without having to modify .htaccess files or Apache/nginx virtual hosts. This means you won‘t have to edit any files outside the project, and all the environment variables are always set no matter how you run your project - Apache, Nginx, CLI, and even PHP 5.4‘s built-in webserver. It‘s WAY easier than all the other ways you know of to set environment variables, and you‘re going to love it.

. NO editing virtual hosts in Apache or Nginx
. NO adding php_value flags to .htaccess files
. EASY portability and sharing of required ENV values
. COMPATIBLE with PHP‘s built-in web server and CLI runner
时间: 2024-10-24 10:50:24

关于Lumen / Laravel .env 文件中的环境变量是如何生效的的相关文章

yml 文件中使用环境变量

Spring Boot 中可以用 spring.profiles.active 参数来指定系统环境,让系统加载不同的配置文件. 可以在程序启动的时候加上参数来指定需要的配置 java -Dspring.profiles.active="dev" -jar user.jar 当然我们也可以事先设置好系统的环境变量 expoer SERVER_EVN=test 然后在 yml 文件中用 active: ${SERVER_EVN} 来动态的获取系统已设置好的数据.这样这台 test 服务器中

java中获取环境变量

分为获取java自身的一些环境变量和和操作系统相关的环境变量. 获取JVM相关的一些变量 在运行时设置一个环境变量 debug 为 true: java -Ddebug=true YourClass在程序中设置一个环境变量 debug 为 true: System.setProperty( "debug", "true" );获取一个环境变量 debug : String debug = System.getProperty( "debug" )

在PHP中管理环境变量

在PHP中管理环境变量 现在我们都能用很多个编程语言开发,当我开始熟悉PHP时,我会忽略其它语言的特点.我用过其他语言(比如Node.js),但在PHP中没有看到一种轻松控制设置环境变量的方法,特别是在开发中.在Node.js中,dotenv库非常适合这种情况,后来我在PHP中,发现vlucas已经创建了phpdotenv,我准备将这个库应用到PHP项目中. 管理环境变量 在开发环境下,我们的代码应该从本地读取文件而不是实装环境变量中读取变量.这样可以更容易地切换项目,我们可以为每个项目编写一个

在docker镜像中加入环境变量

原文链接 前言 reference:https://vsupalov.com/docker-build-time-env-values/ 很多时候,我们需要在docker镜像中加入环境变量,本人了解的有2种方法可以做到 第一种 使用docker run --env VARIABLE=VALUE image:tag直接添加变量,适用于直接用docker启动的项目 [email protected]:/home/vickey/test_build# docker run --rm -it --env

001_java开发中配置环境变量的含义

在学习java的时候需要配置环境变量,但是为什么需要配置path和classpath这2个环境变量呢?    (1) 首先,搞起清楚path这个环境变量的作用.我们cmd到dos命令窗口的时候,输入ipconfig.        其实它调用的是存放在某个目录下面的ipconfig.exe程序,那么操作系统如何知道ipconfig程序存放在哪个目录下的呢?        这时候我们用set path的命令,就能看到很多目录,用;隔开.(如下所示)        #################

Visual Studio中的环境变量(以Visual Studio 2013为例)

前言 本文总结了Visual Studio中常见的环境变量及其在组织解决方案.工程中的作用. 注:本文使用的是Visual Studio 2013,由于作者主要从事C/C++开发,所以是以Visual C++的工作环境配置来描述. 什么是vs的环境变量? 先看图吧,图中以美元符号$开头 + 一对括号,这样进行引用的就是我所谓的环境变量, 图中出现的几个环境变量含义如下: 环境变量名 含义 $(SolutionDir) 解决方案目录:即.sln文件所在路径 $(Configuration) 当前的

python 程序中设置环境变量

python 中调用系统命令有三种方法: 1.os.system('command') ,这个方法是直接调用标准C的system() 函数,仅仅在一个子终端运行系统命令,而不能获取命令执行后的返回信息. 2.os.popen('command'),该方法不但执行命令还返回执行后的信息对象,是通过一个管道文件将结果返回,例如可以设置一个变量,返回结果. 1 cha = os.popen('ls /').readlines 3.模块subprocess,实际使用过程中发现,假设要在代码当前进程中设置

Linux中的环境变量PATH

首先一点Linux中的每个命令其本质是一个可执行的文件,以ls命令为例.通过命令:$:whereis ls可以查看ls命令的位置在/bin/目录下.当用$:ls -l /bin/ls命令查看文件/bin/ls的属性时,得到如下结果: 其实我们在任意目录下执行的ls命令时,其实执行的是位于/bin目录下的ls文件.那么当在任意目录下执行各种命令时,是怎么找到各自的命令的呢?这就是PATH的作用.查看环境变量PATH的内容如下: PATH的作用就是,当输入命令的时候,Linux会去查找PATH里面记

Linux有问必答:如何在Linux中修改环境变量PATH

提问: 当我试着运行一个程序时,它提示“command not found”. 但这个程序就在/usr/local/bin下.我该如何添加/usr/local/bin到我的PATH变量下,这样我就可以不用指定路径来运行这个命令了. 在Linux中,PATH环境变量保存了一系列的目录用于用户在输入的时候搜索命令.PATH变量的值由一系列的由分号分隔的绝对路径组成.每个用户都有特定的PATH环境变量(由系统级的PATH变量初始化). 要检查用户的环境变量,用户模式下运行下面的命令: $ echo $