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