如何在CLI中检测环境


How to detect environment in CLI?

对于在开发服务器和生产服务器上运行的脚本,我有不同的配置文件。问题是,我能以某种方式检测出哪个是哪个吗?

根据您所在的服务器,可以包含不同的引导文件。因此

include "bootstrap.php";
// your script etc..

在生产框中,bootstrap.php将具有一个常量IS_DEV = FALSE在开发框中,bootstrap.php将具有相同的常量IS_DEV = TRUE

因此,相同的脚本将包括相同的文件名bootstrap.php,但bootstrap的内容将具有不同的IS_DEV常量变量值。

一些可供选择的解决方案:

  • 使用config.iniconfig.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!';
}