laravel5已经设计了环境管理功能:php
使用HTTP时只须要在apache或nginx中添加APP_ENV=环境名 便可(固然比较麻烦,每一个服务器环境都须要配置),若是使用artisan 命令行方式只须要在命令中追加参数 --env=环境名 便可。但并未作到不一样环境取不一样配置的功能,须要额外增长代码便可。nginx
在HTTP方式中,若是对每一个服务器添加 环境变量 虽然可行,可给域名留下随意配置的借口,给后续经过域名就能区分环境留下不便,在这里推荐一个办法,使用域名的后缀来定义环境,极大的方便域名区分环境,同时也不须要在服务器中配置 环境变量,给搭建环境提供方便。laravel
使用域名进行区分环境的好处是不一样的域名能够直观看出这是哪一个环境。
apache
以域名 www.laravel.com 为例:bootstrap
各环境域名要求以下:
bash
本地环境: www.laravel.loc
服务器
开发合成环境:www.laravel.dev
app
测试环境: www.laravel.test
框架
预发环境:www.laravel.pre
ide
正式生产环境:www.laravel.com
其中开发环境,测试环境匀能够在公共路由配置hosts,方便你们使用。
增长代码:
在 bootstrap/目录下增长文件 env.php 并增长代码:
<?php //域名配置 $env_hosts = [ 'local' => ['www.laravel.loc'], 'develop' => ['www.laravel.dev'], 'test' => ['www.laravel.test'], 'production' => ['www.laravel.com'], ]; //环境处理 if (!$app->runningInConsole()) {//HTTP形式 if (empty($_SERVER['HTTP_HOST'])) { die('[error] no host'); } foreach ($env_hosts as $env => $hosts) { if (in_array($_SERVER['HTTP_HOST'], $hosts)) { $app_env = $env; break; } } } else {//其它形式 $app_env = $app->detectEnvironment(function () { return 'production'; }); } if (empty($app_env) || empty($env_hosts[$app_env])) { die('[error] no environment'); } //写入环境配置 Dotenv::setEnvironmentVariable('APP_ENV', $app_env); Dotenv::setEnvironmentVariable('APP_HOST', $env_hosts[$app_env][0]); $app->loadEnvironmentFrom(env('APP_ENV') . '.env') ->useEnvironmentPath(base_path('env'));
在bootstrap/app.php文件中增长一行:(注意位置,必定要在Illuminate\Foundation\Application实例化以后)
require_once __DIR__.'/env.php';
以下:
在框架的根目录建立 env 目录并添加以下几个文件:内容能够直接复制 .env 文件
local.env
develop.env
testing.env
pretest.env
production.env
如今能够在任意controller中测试环境变量是否OK:
在不一样的环境文件中修改配置: APP_KEY 的值。
var_dump(app()['env'],env('APP_KEY'));die;
注意:使用这种方式配置环境须要额外增长几个环境配置文件,当有一个在变更时,其它的几个就有可能须要跟着变更,若是几个环境中彻底不会变的配置,就无需添加到环境配置中,使用这种方式配置的环境。
在调用 artisan 命令时若是命令中执行代码有涉及到环境,那么都须要添加上环境参数,如:
php artisan queue:listen --env=production
不然命令行会引用错误环境配置,致使程序异常。
注意:laravel5各个小版本包括 lumen 会有些差别主要是 Dotenv::setEnvironmentVariable 方式有两种版本:
静态方式调用版:(laravel 5.0 , laravel 5.1)
Dotenv::setEnvironmentVariable('APP_ENV', $app_env);
实例化方式调用版:(laravel 5.2 , lumen)
$load =new Dotenv\Loader(''); $load->setEnvironmentVariable('APP_ENV', $app_env);
使用时注意当前版本。