对于在开发服务器和生产服务器上运行的脚本,我有不同的配置文件。问题是,我能以某种方式检测出哪个是哪个吗?
根据您所在的服务器,可以包含不同的引导文件。因此
include "bootstrap.php";
// your script etc..
在生产框中,bootstrap.php将具有一个常量IS_DEV = FALSE
在开发框中,bootstrap.php将具有相同的常量IS_DEV = TRUE
因此,相同的脚本将包括相同的文件名bootstrap.php,但bootstrap的内容将具有不同的IS_DEV
常量变量值。
一些可供选择的解决方案:
- 使用
config.ini
和config.ini.dist
策略(当另一个不存在时读取.dist
( - 在
.htaccess
或虚拟主机配置中设置一些环境变量,并使用getenv
读取 - 检查是否存在其他计算机上不存在的某些文件
- 比较当前脚本路径
- 确定服务器IP
基本上,您只需要比较这两台机器上的任何不同之处,或者设置一些变量作为参考。
在对问题发表评论后编辑:
.htaccess
示例:
在.htaccess
中(仅在暂存服务器上(:
SetEnv APPLICATION_ENVIRONMENT staging
在您的PHP脚本中:
if ('staging' === getenv('APPLICATION_ENVIRONMENT')) {
// use config_staging.ini
} else {
// use config_develop.ini
}
请注意,您可能将所有内容都放在一个配置文件中,只需将其划分为多个部分即可。
我认为这可以被称为一个良好的实践,正如Zend框架手册中所建议的那样。
如果您有权访问控制台(您在开发环境中肯定有(,您可以通过shell变量设置此标志:
export APPLICATION_ENVIRONMENT=development
在Windows:上
SET APPLICATION_ENVIRONMENT=development
然后使用CCD_ 11从PHP中读取。
if (PHP_SAPI === 'cli') {
echo 'running in console!';
}