PHP Laravel NGINX html css Bootstrap Python Symfony Apache Windows linux jquery Django ASP vanilla Slim vagrant docker Homestead MySQL Redis Git SVN ssh Root vim PhpStorm Pycharm sass less PHP Laravel android html css Vue Angular React NGINX html css Javascript

Laravel 5+ .env 环境配置文件详解

原创

原创不易 ~ 转载请注明出处哦

在我们开发的时候,有时候我们希望不同的环境中有不同的配置参数,举例来说,你希望生产环境使用的缓存机制与本地环境不同。

要实现这个目的,Laravel使用了DotEnv这个PHP库。在Laraval的安装根目录下,我们会看到一个名为.env.example的文件,我们需要手动将其命名为.env(或拷贝一个副本并将其命名为.env)。
打开.env文件,可以看到一系列配置信息:

APP_NAME=Laravel        
APP_ENV=local        
APP_KEY=base64:qDt/OQzs9YbNTyfHC4xgG+YY87+LcxDkPrB2RW1NxyI=        
APP_DEBUG=true        
APP_URL=http://localhost        
   
LOG_CHANNEL=stack        
   
DB_CONNECTION=mysql        
DB_HOST=127.0.0.1        
DB_PORT=3306        
DB_DATABASE=      
DB_USERNAME=        
DB_PASSWORD=        
   
BROADCAST_DRIVER=log        
CACHE_DRIVER=file        
SESSION_DRIVER=file        
SESSION_LIFETIME=120        
QUEUE_DRIVER=sync        
   
REDIS_HOST=127.0.0.1        
REDIS_PASSWORD=null        
REDIS_PORT=6379        
   
MAIL_DRIVER=smtp        
MAIL_HOST=smtp.mailtrap.io        
MAIL_PORT=2525        
MAIL_USERNAME=null        
MAIL_PASSWORD=null        
MAIL_ENCRYPTION=null        
   
PUSHER_APP_ID=        
PUSHER_APP_KEY=        
PUSHER_APP_SECRET=        
PUSHER_APP_CLUSTER=mt1        
   
MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"        
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"

可以看到,文件中列出了很多配置,包含了缓存,数据库,开发环境,队列等等。
因此,.env文件不应该被加入到版本控制中,也就是说每一个开发环境下的.env文件都是独立的。我们可以根据我们开发环境的不同,配置出不同的.env文件,从而实现不同的开发环境拥有不同的配置参数。


那么基本概念已经介绍完了,接下来我们来分解一下.env文件中比较常用的几个配置参数。

首先看到

APP_NAME=Laravel      
APP_ENV=local      
APP_KEY=base64:qDt/OQzs9YbNTyfHC4xgG+YY87+LcxDkPrB2RW1NxyI=      
APP_DEBUG=true      
APP_URL=http://localhost

其中APP_NAME是我们的项目名称,这里我们可以根据需要自行修改。

注意:如果你输入的字符串中含有空格,请将你的字符串放在""中,例如APP_NAME="Eagle Luo"

APP_ENV是我们的开发环境,在生产环境下,我们可以将其改为production

APP_KEYLaravel生成的一个32位的字符串,用于加密session等数据。
这个钥匙很重要,引用官方文档的话来说,

If the application key is not set, your user sessions and other encrypted data will not be secure!

如果我们使用了compoer安装Laravel,那么这个秘钥会自动帮我们生成,否则我们需要运行

$ php artisan key:generate

来生成这个秘钥。

APP_DEBUG是我们是否打开DEBUG信息的开关,设置为true的时候,代码出现错误将会显示相应的Stack trace,而如果设置为false将隐藏错误信息。

APP_URL则是我们的项目地址。


好了,再来我们看到

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=
DB_USERNAME=
DB_PASSWORD=

DB_CONNECTION指的是我们的数据库连接种类,这个值在config/database.phpconnections数组中被定义:

    'connections' => [      
   
        'sqlite' => [      
            'driver' => 'sqlite',      
            'database' => env('DB_DATABASE', database_path('database.sqlite')),      
            'prefix' => '',      
        ],      
   
        'mysql' => [      
            'driver' => 'mysql',      
            'host' => env('DB_HOST', '127.0.0.1'),      
            'port' => env('DB_PORT', '3306'),      
            'database' => env('DB_DATABASE', 'forge'),      
            'username' => env('DB_USERNAME', 'forge'),      
            'password' => env('DB_PASSWORD', ''),      
            'unix_socket' => env('DB_SOCKET', ''),      
            'charset' => 'utf8mb4',      
            'collation' => 'utf8mb4_unicode_ci',      
            'prefix' => '',      
            'strict' => true,      
            'engine' => null,      
        ],      
   
        'pgsql' => [      
            'driver' => 'pgsql',      
            'host' => env('DB_HOST', '127.0.0.1'),      
            'port' => env('DB_PORT', '5432'),      
            'database' => env('DB_DATABASE', 'forge'),      
            'username' => env('DB_USERNAME', 'forge'),      
            'password' => env('DB_PASSWORD', ''),      
            'charset' => 'utf8',      
            'prefix' => '',      
            'schema' => 'public',      
            'sslmode' => 'prefer',      
        ],      
   
        'sqlsrv' => [      
            'driver' => 'sqlsrv',      
            'host' => env('DB_HOST', 'localhost'),      
            'port' => env('DB_PORT', '1433'),      
            'database' => env('DB_DATABASE', 'forge'),      
            'username' => env('DB_USERNAME', 'forge'),      
            'password' => env('DB_PASSWORD', ''),      
            'charset' => 'utf8',      
            'prefix' => '',      
        ],      
    ],

我们可以根据需要修改这个数组,例如数据库的charsetcollation等信息。

DB_HOSTDB_PORT就不用多说,分别指代了数据库连接的ip和端口号。

DB_DATABASE指的是我们连接上数据库后默认使用的数据库名称。

DB_USERNAMEDB_PASSWORD指的自然是我们连接数据库所使用的用户名和密码。
Homestead开发环境下,默认的MySQL用户名为homestead,密码为secret

以上我们就完成了.env配置文件中最常用配置的讲解,如果需要了解更多关于Homestead开发环境的信息,请查看

Windows 7/8/10 系统下Laravel框架的开发环境安装及部署详解(Vagrant + Homestead)


正在加载验证码......
请先完成验证