Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在CLI中检测环境?_Php - Fatal编程技术网

Php 如何在CLI中检测环境?

Php 如何在CLI中检测环境?,php,Php,对于同时在开发服务器和生产服务器上运行的脚本,我有不同的配置文件。 问题是,我能检测出哪个是哪个吗?根据您所在的服务器,有不同的引导文件要包含。所以 include "bootstrap.php"; // your script etc.. 在production框中,bootstrap.php将有一个常量IS\u DEV=FALSE 在开发框中,bootstrap.php将具有相同的常量IS\u DEV=TRUE 因此,相同的脚本将包含相同的文件名bootstrap.php,但bootstr

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

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

include "bootstrap.php";
// your script etc..
在production框中,bootstrap.php将有一个常量
IS\u DEV=FALSE
在开发框中,bootstrap.php将具有相同的常量
IS\u DEV=TRUE


因此,相同的脚本将包含相同的文件名bootstrap.php,但bootstrap的内容对于
IS\u DEV
常量变量将具有不同的值

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

if (PHP_SAPI === 'cli') {
  echo 'running in console!';
}
  • 使用
    config.ini
    config.ini.dist
    策略(
    .dist
    在另一个不存在时读取)
  • .htaccess
    或虚拟主机配置中设置一些环境变量,并使用
    getenv
  • 检查是否存在其他计算机上不存在的文件
  • 比较当前脚本路径
  • 确定服务器IP
基本上,您只需要比较这两台机器上的任何差异,或者设置一些变量作为参考

对问题发表评论后编辑:
.htaccess
示例:

.htaccess
中(仅在临时服务器上):

在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

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

$\u在CLI中运行脚本时,服务器变量不可用,因此这不起作用。@takeshin k,然后我删除了该答案。使用引导文件也会很有效。如果这个问题能带来一些细节(到目前为止您尝试了什么,配置文件的类型,CLI的限制等等),您会找到更相关的答案。好的,我需要一个好的解决方案,用于您只拥有.htaccess和php.ini的分销商帐户。为什么我需要一个好的实践来区分这两种环境。谢谢你指出这一点。请参阅对我的答案的编辑。很抱歉造成混淆:即使我有权访问.htaccess文件,但我要解决的问题是在CLI中运行的脚本。因此,使用.htaccess以通常的方式解决这一问题是行不通的。这会区分不同的SAPI,但不会区分它们运行的位置。
SET APPLICATION_ENVIRONMENT=development