在日常的開發測試中我們經常會遇到本地開發和測試或者線上配置參數不同的場景,必要你要是使用一個三方的支付,它的本地測試和線上的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>
