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


Posted in PHP onApril 06, 2020

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

要实现这个目的,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_KEY是Laravel生成的一个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.php中connections数组中被定义:

'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' => '',   
    ],   
  ],

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

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

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

DB_USERNAME和DB_PASSWORD指的自然是我们连接数据库所使用的用户名和密码。

在Homestead开发环境下,默认的MySQL用户名为homestead,密码为secret。

好了,本文主要讲解了Laravel 5+ .env环境配置文件的各项含义与使用方法,更多源于Laravel框架的使用技巧请查看下面的相关链接

PHP 相关文章推荐
PHP $_SERVER详解
Jan 16 PHP
PHP 配置文件中open_basedir选项作用
Jul 19 PHP
php 分库分表hash算法
Nov 12 PHP
用Simple Excel导出xls实现方法
Dec 06 PHP
PHP设计模式之调解者模式的深入解析
Jun 13 PHP
PHP 利用Mail_MimeDecode类提取邮件信息示例
Jan 26 PHP
php需登录的文件上传管理系统
Mar 21 PHP
使用PHP如何实现高效安全的ftp服务器(二)
Dec 30 PHP
PHP封装类似thinkphp连贯操作数据库Db类与简单应用示例
May 08 PHP
Laravel第三方包报class not found的解决方法
Oct 13 PHP
php pdo连接数据库操作示例
Nov 18 PHP
php 多继承的几种常见实现方法示例
Nov 18 PHP
Laravel5.3+框架定义API路径取消CSRF保护方法详解
Apr 06 #PHP
Laravel框架使用技巧之使用url()全局函数返回前一个页面的地址方法详解
Apr 06 #PHP
使用git迁移Laravel项目至新开发环境的步骤详解
Apr 06 #PHP
Laravel框架数据库迁移操作实例详解
Apr 06 #PHP
Laravel框架中队列和工作(Queues、Jobs)操作实例详解
Apr 06 #PHP
Laravel实现批量更新多条数据
Apr 06 #PHP
PHP正则之正向预查与反向预查讲解与实例
Apr 06 #PHP
You might like
PHP 5.0对象模型深度探索之绑定
2006/09/05 PHP
php获取中文拼音首字母类和函数分享
2014/04/24 PHP
Thinkphp中的volist标签用法简介
2014/06/18 PHP
9段PHP实用功能的代码推荐
2014/10/14 PHP
支持汉转拼和拼音分词的PHP中文工具类ChineseUtil
2018/02/23 PHP
layui框架实现文件上传及TP3.2.3(thinkPHP)对上传文件进行后台处理操作示例
2018/05/12 PHP
JSON 入门指南 想了解json的朋友可以看下
2009/08/26 Javascript
javascript实现图片切换的幻灯片效果源代码
2012/12/12 Javascript
常用的jQuery前端技巧收集
2014/12/24 Javascript
jquery实现二级导航下拉菜单效果
2015/12/18 Javascript
KnockoutJs快速入门教程
2016/05/16 Javascript
js控住DOM实现发布微博效果
2016/08/30 Javascript
Javascript实现base64的加密解密方法示例
2017/06/27 Javascript
NW.js 简介与使用方法
2018/02/01 Javascript
Vue使用vue-area-linkage实现地址三级联动效果的示例
2018/06/27 Javascript
微信小程序前端promise封装代码实例
2019/08/24 Javascript
[01:33]真香警告!DOTA2勇士令状不朽珍藏Ⅱ饰品欣赏
2018/06/26 DOTA
跟老齐学Python之不要红头文件(1)
2014/09/28 Python
python 捕获shell脚本的输出结果实例
2017/01/04 Python
python网络爬虫之如何伪装逃过反爬虫程序的方法
2017/11/23 Python
Python机器学习之决策树算法实例详解
2017/12/06 Python
浅谈tensorflow中几个随机函数的用法
2018/07/27 Python
python判断一个对象是否可迭代的例子
2019/07/22 Python
python构建指数平滑预测模型示例
2019/11/21 Python
Django 用户登陆访问限制实例 @login_required
2020/05/13 Python
python 实现socket服务端并发的四种方式
2020/12/14 Python
Python基于爬虫实现全网搜索并下载音乐
2021/02/14 Python
伦敦最受欢迎的蛋糕店:Konditor & Cook
2019/11/01 全球购物
自动化专业本科毕业生求职信
2013/10/20 职场文书
护士毕业生自我鉴定
2014/02/08 职场文书
做一个有道德的人演讲稿
2014/05/14 职场文书
工伤私了协议书范本
2014/11/24 职场文书
主题班会开场白
2015/06/01 职场文书
城南旧事读书笔记
2015/06/29 职场文书
Django框架之路由用法
2022/06/10 Python
Java中的Kotlin 内部类原理
2022/06/16 Java/Android