處理多環境?

開發者常常希望根據是生產環境還是開發環境能夠區分不同的定制行為,例如,如果在開發環境的程序當中輸出詳細的錯誤信息這樣做對開發者來說是非常有幫助的,但是這樣做的話在生產環境中會造成一些安全問題。 In development environments, you might want additional tools loaded that you don’t in production environments, etc.

環境常量?

CodeIgniter 默認使用 $_SERVER[‘CI_ENVIRONMENT’] 的值作為 ENVIRONMENT 常量,否則默認就是 ‘production’。這樣能夠根據不同服務器安裝環境定制不同的環境依賴。

.env?

最簡單的方式是在你的 .env 配置文件里設置。

CI_ENVIRONMENT = development

Apache?

如果要獲取 $_SERVER[‘CI_ENVIRONMENT’] 的值可以在 .htaccess 的文件里,或者可以在Apache的配置文件里使用 SetEnv 命令進行設置

SetEnv CI_ENVIRONMENT development

nginx?

在 nginx 下,為了能夠在 $_SERVER 里顯示環境變量的值你必須通過 fastcgi_params 來傳遞。這樣允許它在虛擬主機上工作來替代使用 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 地址設置常量(實例)。

使用這個常量,除了會影響到一些基本的框架行為外(見下一章節),在開發過程中你還可以使用常量來區分當前運行的是什么環境。

引導文件?

CodeIgnite 要求在 APPPATH/Config/Boot 下放置一個與環境名稱匹配的 PHP 腳本文件。這些文件包含你想為你的環境所做的符合要求的任何定制,無論是更新對錯誤顯示的設置,還是加載附加開發工具,或者是添加其他東西。系統會自動加載這些文件。在新的版本中為你創建好了以下文件:

* development.php
* production.php
* testing.php

默認框架行為的影響?

CodeIgniter 系統中有幾個地方用到了 ENVIRONMENT 常量。這一節將描述 它對框架行為有哪些影響。

錯誤報告?

將 ENVIRONMENT 常量值設置為 ‘development’,這將導致所有發生的 PHP 錯誤在客戶端請求頁面時顯示在瀏覽器上。相反,如果將常量設置為 ‘production’ 將禁用所有錯誤輸出。在生產環境禁用錯誤輸出是 良好的安全實踐

配置文件?

另外,CodeIgnite 還可以根據不同的環境自動加載不同的配置文件,這在處理例如不同環境下有著不同的API Key的情況時相當有用。這在 配置類 文檔中的“環境”一節有著更詳細的介紹。