PHP 在项目的配置文件中使用服务器的环境变量

jackxiang 2009-11-16 21:39 | |
一个php项目的config 文件的本地测试版本和服务器上的正式版本常常会不同(例如:在 config 中设置 mysql连接的用户名和密码,可是本地测试数据库 跟 服务器上的数据库很可能不同),这就给svn带来了麻烦。虽然可以通过 svn:ignore 属性来忽略这些 config 这些,可是 当config 文件的内容发生变化时,merge 会很麻烦(尤其你通过 ssh 管理服务器的话,没有gui的 diff 工具)。

我的解决办法是将配置数据设置为服务器的环境变量,在config 中使用这些环境变量,例如一个config 文件:
<?
// ... ...

// 数据库 首选参数
JCAT_DB::$sPreferredFactory                = 'JCAT_DBFactoryMySQL41' ;
JCAT_DB::$sPreferredDBServer            = 'localhost' ;
JCAT_DB::$sPreferredDBName                = SameDB' ;
JCAT_DB::$sPreferredDBUser                = 'root' ;
JCAT_DB::$sPreferredDBPassword            = '' ;      

// ... ...
?>
可以 改为:
<?
// ... ...

// 数据库 首选参数
JCAT_DB::$sPreferredFactory                = $_SERVER['DBPreferredFactory'];
JCAT_DB::$sPreferredDBServer            = $_SERVER['DBPreferredServer'];
JCAT_DB::$sPreferredDBName                = $_SERVER['DBPreferredName'];
JCAT_DB::$sPreferredDBUser                = $_SERVER['DBPreferredUser'];
JCAT_DB::$sPreferredDBPassword            = $_SERVER['DBPreferredPassword'];  

// ... ...
?>

然后在 apache 的配置文件中(或 .htaccess) 中设置:

SetEnv DBPreferredFactory 'JCAT_DBFactoryMySQL41'
SetEnv DBPreferredServer 'localhost'
SetEnv DBPreferredName 'SameDB'
SetEnv DBPreferredUser 'root'
SetEnv sPreferredDBPassword ''

(说明:SetEnv 属于 mod_env.so 所以必须先确保该模块可用)

在 php.ini 设置
safe_mode_allowed_env_vars=DB


重启 apache

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/2230/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!

评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]