CodeIgniter3:为什么首先要设置 $_SERVER['CI_ENV']?

CodeIgniter3: Why would $_SERVER['CI_ENV'] ever be set in the first place?

我看到在他们的默认安装中,他们的 index.php 有这个:

define('ENVIRONMENT', isset($_SERVER['CI_ENV']) ? $_SERVER['CI_ENV'] : 'development');

为什么 CI_ENV 曾经 已经 设置在 $_SERVER 数组中?

这是 codeigniter 使用的约定。它有助于框架功能 'out of the box'.

正如奥利弗所描述的;它是多种环境的特殊用例。通过 .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>

你认为它永远不会改变,除非有一些人工干预,这是对的。关于此的文档不​​多:

"This server variable can be set in your .htaccess file, or Apache config using SetEnv. Alternative methods are available for nginx and other servers, or you can remove this logic entirely and set the constant based on the server’s IP address."

来源:Using the Environment Constant

以防万一你使用nginx,这是你必须添加的配置 内部虚拟主机配置:

  server {

        location ~ \.php$ {
            fastcgi_param CI_ENV production;
        }

保存并运行 nginx语法检查(免得你骂我):

nginx -t

如果您遇到问题或找不到参数,可以按照以下答案进行操作: Nginx variables similar to SetEnv in Apache?