如何在CLI中检测环境?

时间:2011-07-22 16:15:13

标签: php

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

3 个答案:

答案 0 :(得分:6)

根据您所在的服务器,提供不同的引导程序文件。所以

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

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

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

答案 1 :(得分:2)

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

  • 使用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 Framework手册中建议这样做。


如果您有权访问控制台(在开发环境中肯定有),可以通过shell变量设置此标志:

export APPLICATION_ENVIRONMENT=development
Windows上的

SET APPLICATION_ENVIRONMENT=development

然后使用PHP中的getenv读取它。

答案 2 :(得分:-1)

if (PHP_SAPI === 'cli') {
  echo 'running in console!';
}
相关问题