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']?的主要内容,如果未能解决你的问题,请参考以下文章

codeIgniter3 学习笔记七(图像)

codeIgniter3 学习笔记八(session)

codeIgniter3 学习笔记十(数据库操作)

ios开发为啥mjheader为啥刷新完了回不去了

为啥会出现 CodeIgniter 安装错误

protel99 pcb 边框为啥要画到keepoutlayer (禁止布线层)?