CodeIgniter4 處理多環(huán)境

2020-08-17 14:53 更新

開發(fā)者常常希望根據(jù)是生產(chǎn)環(huán)境還是開發(fā)環(huán)境能夠區(qū)分不同的定制行為,例如,如果在開發(fā)環(huán)境的程序當(dāng)中輸出詳細(xì)的錯(cuò)誤信息這樣做對開發(fā)者來說是非常有幫助的,但是這樣做的話在生產(chǎn)環(huán)境中會造成一些安全問題。

環(huán)境常量

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

.env

最簡單的方式是在你的 .env 配置文件里設(shè)置:

CI_ENVIRONMENT = development

Apache

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

SetEnv CI_ENVIRONMENT development

nginx

在 nginx 下,為了能夠在 $_SERVER 里顯示環(huán)境變量的值你必須通過 fastcgi_params 來傳遞。這樣允許它在虛擬主機(jī)上工作來替代使用 env 去為整個(gè)服務(wù)器設(shè)置它,即使在專用服務(wù)器上運(yùn)行良好。你可以修改該服務(wù)器的配置為:

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


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

可選方法適用于 nginx 和其它服務(wù)器,或者你也可以完全移除這部分邏輯,并根據(jù)服務(wù)器的 IP 地址設(shè)置常量(實(shí)例)。

使用這個(gè)常量,除了會影響到一些基本的框架行為外(見下一章節(jié)),在開發(fā)過程中你還可以使用常量來區(qū)分當(dāng)前運(yùn)行的是什么環(huán)境。

引導(dǎo)文件

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

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

默認(rèn)框架行為的影響

CodeIgniter 系統(tǒng)中有幾個(gè)地方用到了 ENVIRONMENT 常量。這一節(jié)將描述 它對框架行為有哪些影響。

錯(cuò)誤報(bào)告

將 ENVIRONMENT 常量值設(shè)置為 ‘development’,這將導(dǎo)致所有發(fā)生的 PHP 錯(cuò)誤在客戶端請求頁面時(shí)顯示在瀏覽器上。相反,如果將常量設(shè)置為 ‘production’ 將禁用所有錯(cuò)誤輸出。在生產(chǎn)環(huán)境禁用錯(cuò)誤輸出是良好的安全實(shí)踐。

配置文件

另外,CodeIgnite 還可以根據(jù)不同的環(huán)境自動(dòng)加載不同的配置文件,這在處理例如不同環(huán)境下有著不同的API Key的情況時(shí)相當(dāng)有用。這在配置類文檔中的“環(huán)境”一節(jié)有著更詳細(xì)的介紹。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號