基于thinkphp5框架做一个可以区别开发、测试、生产三种环境的配置加载
在日常的开发测试中我们经常会遇到本地开发和测试或者线上配置参数不同的场景,必要你要是使用一个三方的支付,它的本地测试和线上的key值或者账号存在不同。最基本的做法是本地用测试参数,提交到测试的时候再改参数。这种做法比较繁琐。
此时我们完全可以使用下面降到的方法,根据项目运行环境来自动加载参数。活不多说请看下文讲解;
先看目录结构
project 应用部署目录
├─application           应用目录(可设置)
│  ├─common             公共模块目录(可更改)
│  ├─index              模块目录(可更改)
│  │  ├─config.php      模块配置文件
│  │  ├─common.php      模块函数文件
│  │  ├─controller      控制器目录
│  │  ├─model           模型目录
│  │  ├─view            视图目录
│  │  └─ ...            更多类库目录
│  ├─config  新增的参数目录,可以根据环境自动加载
│  │  ├─dev_config
│  │  ├─test_config
│  │  ├─pro_config
│  │  └─ ...
│  ├─command.php        命令行工具配置文件
│  ├─common.php         应用公共(函数)文件
│  ├─config.php         应用(公共)配置文件
│  ├─database.php       数据库配置文件
│  ├─tags.php           应用行为扩展定义文件
│  └─route.php          路由配置文件
├─extend                扩展类库目录(可定义)
├─public                WEB 部署目录(对外访问目录)
│  ├─static             静态资源存放目录(css,js,image)
│  ├─index.php          应用入口文件
│  ├─router.php         快速测试文件
│  └─.htaccess          用于 apache 的重写
├─runtime               应用的运行时目录(可写,可设置)
├─vendor                第三方类库目录(Composer)
├─thinkphp              框架系统目录
├─build.php             自动生成定义文件(参考)
├─composer.json         composer 定义文件
├─LICENSE.txt           授权说明文件
├─README.md             README 文件
├─think                 命令行入口文件
其中application下的config 这个目录自己创建的,里面就是放一些不同环境下的配置参数
再说下怎么将这些配置自动加载进去
我们在application下的config.php文件最下面加入下面代码
/**
* 根据环境变量动态加载配置文件
* $_SERVER['ENV']来自nginx或apache自定义参数 dev:开发;test:测试;pro:生产
*/
$_ENV = isset($_SERVER['ENV']) ? $_SERVER['ENV'] : 'dev';
$conf_extend = require APP_PATH . "config/{$_ENV}_config.php";
return array_merge($config, $conf_extend);
然后将上面的 return [...];改为 $config = [...];
上面有一个环境变量,我们正是基于这个这个环境变量来判断及加载那个配置文件的,但是这个参数不能直接获取到,它需要我们去自己的nginx或者apache中去添加"ENV"变量
1.在nginx服务器下
在vhosts.conf文件中添加变量ENV值为dev
server {
        listen       80;
        server_name  a.com;
        root   "D:\phpStudy\PHPTutorial\WWW\a.net";
        location / {
            index  index.html index.htm index.php;
            #autoindex  on;
        }
        location ~ \.php(.*)$ {
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_split_path_info  ^((?U).+\.php)(/?.+)$;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            fastcgi_param  PATH_INFO  $fastcgi_path_info;
            fastcgi_param  PATH_TRANSLATED  $document_root$fastcgi_path_info;
            include        fastcgi_params;   #可以放到一个共用文件里面 需要的项目则包含
            fastcgi_param  ENV  'dev';#只针对当前项目 会覆盖fastcgi_params中的值
2.在apache服务器下:
在vhosts.conf文件中添加变量ENV值为dev
<VirtualHost *:80>
DocumentRoot "D:\phpstudy\PHPTutorial\WWW\my_admin"
ServerName www.my_admin.cc
ServerAlias
SetEnv ENV dev
<Directory "D:\phpstudy\PHPTutorial\WWW\my_admin">
Options FollowSymLinks ExecCGI
AllowOverride All
Order allow,deny
Allow from all
Require all granted
</Directory>
</VirtualHost>
重启服务器,搞定!
author:zmq <849997846@qq.com>
基于thinkphp5框架做一个可以区别开发、测试、生产三种环境的配置加载的更多相关文章
- webpack开发和生产两个环境的配置详解
		
一开始在接触webpack 的时候,简直痛不欲生,现在回头看,做个注释,当然参考了很多文章.这是一个关于vue 开发的webpack 架构会列举出来webpack 系列教程Webpack——令人困惑的 ...
 - Java Web -- Servlet(5) 开发Servlet的三种方法、配置Servlet具体解释、Servlet的生命周期(2)
		
三.Servlet的生命周期 一个Java servlet具有一个生命周期,这个生命周期定义了一个Servlet怎样被加载并被初始化,怎样接收请求并作出对请求的响应,怎样被从服务中清除.Servlet ...
 - 基于SSH框架的网上书店系统开发的质量属性
		
基于SSH框架的网上书店系统开发的质量属性 对于我的基于SSH框架的网上书店系统的开发要实现的质量属性有可用性.可修改性.性能.安全性.易用性和可测试性. 1.对于可用性方面的战术: 可用性(Avai ...
 - 基于trie树做一个ac自动机
		
基于trie树做一个ac自动机 #!/usr/bin/python # -*- coding: utf-8 -*- class Node: def __init__(self): self.value ...
 - 基于Flask框架搭建视频网站的学习日志(三)之原始web表单
		
基于Flask框架搭建视频网站的学习日志(三)1.原始Web 表单 本节主要用于体验一下前端后端直接数据的交互,样例不是太完善,下一节会加入Flash处理,稍微完善一下页面 (备注:建议先阅读廖雪峰老 ...
 - 驱动开发学习笔记. 0.07 Uboot链接地址 加载地址 和 链接脚本地址
		
驱动开发学习笔记. 0.07 Uboot链接地址 加载地址 和 链接脚本地址 最近重新看了乾龙_Heron的<ARM 上电启动及 Uboot 代码分析>(下简称<代码分析>) ...
 - VUE 如何分环境打包(开发/测试/生产)配置
		
前言 之前小玲一直处于更新,迭代项目的状态,开发环境.测试环境.生产环境都是前辈配置好的,自己几乎没有配置过,这次做几个新项目时,面临着上线,需要分环境打包配置,于是在网上遨游了一会会,摸索着按照网上 ...
 - 【SpringBoot 基础系列】实现一个自定义配置加载器(应用篇)
		
[SpringBoot 基础系列]实现一个自定义配置加载器(应用篇) Spring 中提供了@Value注解,用来绑定配置,可以实现从配置文件中,读取对应的配置并赋值给成员变量:某些时候,我们的配置可 ...
 - struts2开发action 的三种方法以及通配符、路径匹配原则、常量
		
struts2开发action 的三种方法 1.继承ActionSupport public class UserAction extends ActionSupport { // Action中业务 ...
 
随机推荐
- xml的运用
			
<?xml version="1.0" encoding="utf-8"?><class> <student> <na ...
 - MSSQL行车列规则
			
行转列,是SQL中经常会遇到的一个问题,并且分为静态转换和动态转换,所谓静态转换即在转换的行数已知或固定:动态转换则为转换的行数不固定. 转换的方法一般采用case when语句或pivot(MSSQ ...
 - php 常用操作数组函数
			
我们有很多操作数组的元素,我们这一节先讲一些.在6.3里面我们会总结更多的数组常用函数.深圳dd马达 下面的几个主要是移动数组指针和压入弹出数组元素的和个函数. 函数 功能 array_shift 弹 ...
 - codeforcesC - Berry Jam(折半枚举+1-1序列前后缀和)
			
Educational Codeforces Round 78 (Rated for Div. 2) C - Berry Jam C. Berry Jam time limit per test 2 ...
 - Redis 高可用架构设计(转载)
			
转载自:https://mp.weixin.qq.com/s?__biz=MzA3NDcyMTQyNQ==&mid=2649263292&idx=1&sn=b170390684 ...
 - learning java 读写其他进程的数据
			
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public ...
 - Kerberos(一)  安装
			
1.服务器基本信息 操作系统:centos7 数量:2 主机名映射关系 IP hostname server 192.168.4.50 manager1 Kerberos server(kdc) 19 ...
 - plsql 如何导入excel数据?
			
oracle 导入excel数据? 通过plsql实现 1.准备工作 Excel中的字段名称,必须和表结构字段一 一对应 下面以tdoctor_apply表为例,进行演示 表结构 Excel表数据 ...
 - intellij ide 集成cmder
			
1.环境变量配置: https://github.com/cmderdev/cmder/wiki/Setting-up-Environment-Variables 2.intellijide的配置:h ...
 - Net core学习系列(五)——Net Core应用程序Startup类介绍
			
一.Startup 类 ASP.NET Core应用程序需要一个启动类,按照惯例命名为Startup.在主程序的Web Host生成器(WebHostBuilderExtensions)的 UseSt ...