CodeIgniter3:为啥首先要设置 $_SERVER['CI_ENV']?
Posted
技术标签:
【中文标题】CodeIgniter3:为啥首先要设置 $_SERVER[\'CI_ENV\']?【英文标题】:CodeIgniter3: Why would $_SERVER['CI_ENV'] ever be set in the first place?CodeIgniter3:为什么首先要设置 $_SERVER['CI_ENV']? 【发布时间】:2016-07-03 05:54:12 【问题描述】:我看到在他们的默认安装中,他们的 index.php 有这个:
define('ENVIRONMENT', isset($_SERVER['CI_ENV']) ? $_SERVER['CI_ENV'] : 'development');
为什么CI_ENV
会已经设置在$_SERVER
数组中?
【问题讨论】:
【参考方案1】:正如奥利弗所描述的那样;这是多个环境的特殊用例。在进入代码之前通过.htaccess
将开发、测试和生产分开。要配置它:
开发(本地主机)
<IfModule mod_env.c>
SetEnv CI_ENV development
</IfModule>
测试(您的本地服务器)
<IfModule mod_env.c>
SetEnv CI_ENV testing
</IfModule>
生产(远程服务器)
<IfModule mod_env.c>
SetEnv CI_ENV production
</IfModule>
您的想法是对的,除非有一些人工干预,否则它永远不会改变。这方面的文档不多:
"这个服务器变量可以在你的 .htaccess 文件中设置,或者使用 SetEnv 的 Apache 配置。替代方法可用于 nginx 和其他服务器,或者你可以完全删除这个逻辑并根据服务器的 IP 地址设置常量。 "
来源:Using the Environment Constant
【讨论】:
【参考方案2】:以防万一您使用的是 nginx,这是您必须添加的配置 内部虚拟主机配置:
server
location ~ \.php$
fastcgi_param CI_ENV production;
保存并运行 nginx 语法检查(只是为了避免你诅咒我):
nginx -t
如果您遇到问题或找不到参数,您可以按照以下答案进行操作: Nginx variables similar to SetEnv in Apache?
【讨论】:
这就是我要找的!【参考方案3】:这是 codeigniter 使用的约定。它有助于框架功能“开箱即用”。
【讨论】:
是否存在isset($_SERVER['CI_ENV'])
会评估为true
的情况? ...如果是这样,它是如何以及为什么设置的?
根据服务器配置,它被设置为默认使用 apache以上是关于CodeIgniter3:为啥首先要设置 $_SERVER['CI_ENV']?的主要内容,如果未能解决你的问题,请参考以下文章