laravel5下多环境.env配置

本文介绍如何在Laravel框架中使用域名后缀来区分不同环境,包括本地、开发、测试、预发布及生产环境,并提供了具体实现步骤和注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

laravel5已经设计了环境管理功能:

使用HTTP时只需要在apache或nginx中添加APP_ENV=环境名  即可(当然比较麻烦,每个服务器环境都需要配置),如果使用artisan 命令行方式只需要在命令中追加参数 --env=环境名 即可。但并未做到不同环境取不同配置的功能,需要额外增加代码即可。


在HTTP方式中,如果对每个服务器添加 环境变量 虽然可行,可给域名留下随意配置的借口,给后续通过域名就能区分环境留下不便,在这里推荐一个办法,使用域名的后缀来定义环境,极大的方便域名区分环境,同时也不需要在服务器中配置 环境变量,给搭建环境提供方便。


使用域名进行区分环境的好处是不同的域名可以直观看出这是哪个环境。

以域名 www.laravel.com 为例:


各环境域名要求如下:

本地环境: www.laravel.loc

开发合成环境:www.laravel.dev

测试环境: www.laravel.test

预发环境:www.laravel.pre

正式生产环境:www.laravel.com


其中开发环境,测试环境匀可以在公共路由配置hosts,方便大家使用。


增加代码: 

在 bootstrap/目录下增加文件 env.php 并增加代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?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实例化之后)

1
require_once  __DIR__. '/env.php' ;


如下:

wKioL1i1AgWRtwH0AAHf2ajh4CA603.jpg



在框架的根目录创建 env 目录并添加如下几个文件:内容可以直接复制 .env 文件

local.env

develop.env

testing.env

pretest.env

production.env


现在可以在任意controller中测试环境变量是否OK:

在不同的环境文件中修改配置: APP_KEY  的值。

1
var_dump(app()[ 'env' ],env( 'APP_KEY' )); die ;



注意:使用这种方式配置环境需要额外增加几个环境配置文件,当有一个在变动时,其它的几个就有可能需要跟着变动,如果几个环境中完全不会变的配置,就无需添加到环境配置中,使用这种方式配置的环境。


在调用 artisan 命令时如果命令中执行代码有涉及到环境,那么都需要添加上环境参数,如:

1
php artisan queue:listen -- env =production

否则命令行会引用错误环境配置,导致程序异常。


注意:laravel5各个小版本包括 lumen 会有些差异主要是 Dotenv::setEnvironmentVariable 方式有两种版本:

静态方式调用版:(laravel 5.0 , laravel 5.1)

1
Dotenv::setEnvironmentVariable( 'APP_ENV' $app_env );

实例化方式调用版:(laravel 5.2 , lumen)

1
2
$load  = new  Dotenv\Loader( '' );
$load ->setEnvironmentVariable( 'APP_ENV' $app_env );


使用时注意当前版本。


本文转自  ttlxihuan    51CTO博客,原文链接:http://blog.51cto.com/php2012web/1790948
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值