每次本地环境 测试环境 生产环境的配置文件都是不一样的 如果根据各个不同的环境加载不同的配置参数呢?
想到一个方法:
设置服务器的$_SERVER变量
$config = [
'product'=>[//生产环境配置
'db_host'=>'x.x.x.x',
'db_user'=>'root',
...
],
'test'=>[//测试环境配置
'db_host'=>'y.y.y.y',
'db_user'=>'root',
...
],
'local'=>[//本地环境配置
'db_host'=>'z.z.z.z',
'db_user'=>'root',
...
],
];
$env = $_SERVER['NOW_SERVER_ENV'];
return $config[$env];
环境变量NOW_SERVER_ENV是需要通过我们自己去定义的
apache
SetEnv NOW_SERVER_ENV 'test' #放在外面 则所有站点都可以获取
<VirtualHost *:80>
SetEnv NOW_SERVER_ENV 'test' #放在里面 只有对应的站点可以获取
DocumentRoot "D:\phpStudy\PHPTutorial\WWW\a.com"
ServerName a.cn
<Directory "D:\phpStudy\PHPTutorial\WWW\a.com">
Options FollowSymLinks ExecCGI
AllowOverride All
Order allow,deny
Allow from all
Require all granted
</Directory>
</VirtualHost>
nginx
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 NOW_SERVER_ENV 'test';#只针对当前项目 会覆盖fastcgi_params中的值
}
}
这样无论是哪个环境程序代码都会自动匹配到正确的配置参数了