处理多个环境

开发人员通常希望根据应用程序是在开发环境还是生产环境中运行来改变系统行为。例如,详细的错误输出在开发应用程序时很有用,但在“实时”环境中可能会造成安全问题。在开发环境中,您可能希望加载一些在生产环境中不需要的额外工具,等等。

定义的环境

默认情况下,CodeIgniter 定义了三个环境。

  • production 用于生产环境

  • development 用于开发环境

  • testing 用于 PHPUnit 测试

重要

环境 testing 是为 PHPUnit 测试保留的。它在框架的各个地方内置了特殊条件来帮助进行测试。你不能将其用于开发。

如果你想要另一个环境,例如用于暂存,你可以添加自定义环境。请参阅 添加环境

设置环境

ENVIRONMENT 常量

要设置你的环境,CodeIgniter 提供了 ENVIRONMENT 常量。如果你设置了 $_SERVER['CI_ENVIRONMENT'],则将使用该值,否则默认为 production

这可以通过多种方式设置,具体取决于你的服务器设置。

.env

设置变量的最简单方法是在你的 .env 文件 中。

CI_ENVIRONMENT = development

注意

你可以通过 spark env 命令更改 .env 文件中的 CI_ENVIRONMENT

php spark env production

Apache

可以使用 SetEnv 在你的 .htaccess 文件或 Apache 配置中设置此服务器变量。

SetEnv CI_ENVIRONMENT development

nginx

在 nginx 下,你必须通过 fastcgi_params 传递环境变量,以便它在 $_SERVER 变量下显示。这允许它在虚拟主机级别工作,而不是使用 env 为整个服务器设置它,尽管这在专用服务器上可以正常工作。然后,你将修改你的服务器配置为类似以下内容

server {
    server_name localhost;
    include     conf/defaults.conf;
    root        /var/www;

    location    ~* \.php$ {
        fastcgi_param CI_ENVIRONMENT "production";
        include conf/fastcgi-php.conf;
    }
}

对于 nginx 和其他服务器,可以使用其他方法,或者您可以完全删除此逻辑并根据服务器的 IP 地址(例如)设置常量。

除了影响一些基本框架行为(参见下一节)之外,您还可以使用此常量在您自己的开发中区分您正在运行的环境。

添加环境

要添加自定义环境,您只需要为它们添加引导文件。

引导文件

CodeIgniter 要求在 **APPPATH/Config/Boot** 下有一个与环境名称匹配的 PHP 脚本。这些文件可以包含您希望对您的环境进行的任何自定义,无论是更新错误显示设置、加载额外的开发工具,还是其他任何操作。这些文件由系统自动加载。以下文件在全新安装中已创建

  • development.php

  • production.php

  • testing.php

例如,如果您想添加 staging 环境用于预发布,您只需要

  1. 将 **APPPATH/Config/Boot/production.php** 复制到 **staging.php**。

  2. 如果您需要,可以在 **staging.php** 中自定义设置。

确认当前环境

要确认当前环境,只需回显常量 ENVIRONMENT

您还可以通过 spark env 命令检查当前环境

php spark env

对默认框架行为的影响

CodeIgniter 系统中有一些地方使用 ENVIRONMENT 常量。本节描述了默认框架行为是如何受到影响的。

错误报告

ENVIRONMENT 常量设置为 development 值会导致所有 PHP 错误在发生时渲染到浏览器。相反,将常量设置为 production 将禁用所有错误输出。在生产环境中禁用错误报告是 良好的安全实践