zoukankan      html  css  js  c++  java
  • 基于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:phpStudyPHPTutorialWWWa.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:phpstudyPHPTutorialWWWmy_admin"
        ServerName www.my_admin.cc
        ServerAlias 
        SetEnv ENV dev
      <Directory "D:phpstudyPHPTutorialWWWmy_admin">
          Options FollowSymLinks ExecCGI
          AllowOverride All
          Order allow,deny
          Allow from all
         Require all granted
      </Directory>
    </VirtualHost>
    

      重启服务器,搞定!

     author:zmq <849997846@qq.com>

  • 相关阅读:
    智能推荐算法演变及学习笔记(三):CTR预估模型综述
    从中国农业银行“雅典娜杯”数据挖掘大赛看金融行业数据分析与建模方法
    智能推荐算法演变及学习笔记(二):基于图模型的智能推荐(含知识图谱/图神经网络)
    (设计模式专题3)模板方法模式
    (设计模式专题2)策略模式
    (设计模式专题1)为什么要使用设计模式?
    关于macOS上常用操作命令(持续更新)
    记录下关于RabbitMQ常用知识点(持续更新)
    EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.
    SpringCloud教程二:Ribbon(Finchley版)
  • 原文地址:https://www.cnblogs.com/widgetbox/p/12058929.html
Copyright © 2011-2022 走看看