## 環境
> 環境的支持可幫助FuelPHP和您的應用根據環境設置做出決策。FuelPHP本身使用環境設置根據當前處于活動狀態的環境來加載/覆蓋其他配置設置。
### 環境和配置
> 根據應用程序所設置的環境,Config類查找特定于環境的配置文件。config類在與當前環境匹配的目錄中查找配置文件。如果您與多個使用各自的數據庫連接配置的開發人員一起工作,這將很有幫助。另一個有用的用例是,當您有一個用于測試的服務器應顯示所有PHP錯誤和警告,而您的生產服務器不應該顯示任何錯誤或警告,而只是將其記錄下來以供開發人員稍后檢查時。
這是說明此的示例:
~~~
app/
config/
auth.php
db.php
development/
db.php
staging/
email.php
mike_dev/
db.php
email.php
production/
db.php
~~~
> 當環境設置為 `\Fuel::DEVELOPMENT `時,來自`db.php`的設置將與`development / db.php`合并。除了`\Fuel::STAGING`沒有暫存`/db.php`外,其他任何環境設置都一樣。如果環境設置設置為`\Fuel::STAGING`,那么僅裝入`db.php`。
一個真實的例子就是數據庫配置。沒有默認配置設置(這可能非常危險)。只有特定于環境的配置設置。
### 預定義環境
FuelPHP具有四個預定義的環境。您還可以創建自己的自定義環境。
* **\ Fuel :: DEVELOPMENT**
開發環境。
* **\ Fuel :: TEST**
測試環境。
* **\ Fuel :: STAGING**
臨時環境。
* **\ Fuel :: PRODUCTION**
生產環境。
### 創建自定義環境
> 要創建自定義環境,只需使用自定義字符串(例如*mike\_dev)*并在/ fuel / app / config /中創建匹配的文件夾。
>> 例如:
>> 如果您有一個名為Mike的開發人員,則可以創建一個名為*mike\_dev*的自定義環境。
>> 1. 在/ fuel / app / config /中創建一個名為*mike\_dev*的文件夾
>> 2. 將與Mike相關的所有配置文件放在新的config文件夾中,例如,在設置了*mike\_dev*環境后,將db.php放在/ fuel / app / config / mike\_dev /中,以加載自定義數據庫配置。
>> 3. 請按照以下有關[設置環境](https://fuelphp.com/docs/general/environments.html#setting_env)的說明進行操作。設置環境時,不要使用預定義的FuelPHP環境(例如PRODUCTION),而應使用自定義字符串*mike\_dev*
### 設置環境
有三種設置環境的方法。前兩個允許您設置FuelPHP在加載網頁時將使用的環境。第三個選項顯示了在使用FuelPHP的Oil時如何設置環境。機油不會使用您在下面的前兩個選項中設置的環境,因此每次使用機油時都必須單獨設置。
* 使用服務器環境變量設置環境(推薦)
* 使用*/fuel/app/bootstrap.php*設置環境
* 使用oil時設置環境(不替代上述方法,它有其自己的單獨用途)
#### 使用服務器環境變量設置環境(推薦)
> 您可以使用服務器環境變量**SetEnv**來設置應用程序應在其中運行的環境。每個服務器都有其自己的環境變量。以下包括已知配置的說明。
變量名稱**FUEL_ENV**應該在大寫形式中指定,環境名稱用小寫形式。
##### Apache-服務器配置
1. 確保您的apache服務器配置加載擴展名mod_env
2. 編輯
~~~
httpd.conf
~~~
文件(如果您包括虛擬主機配置,則為所需的虛擬主機配置文件),然后添加以下代碼。
~~~
// run this application in production mode
SetEnv FUEL_ENV production
~~~
##### Apache-用戶配置
1. 確保您的apache服務器配置加載擴展名mod_env
2. 創建一個
~~~
.htaccess
~~~
文件在
~~~
/上市
~~~
您的應用程序目錄
3. 編輯
~~~
.htaccess
~~~
文件并添加以下代碼。
~~~
// run this application in production mode
SetEnv FUEL_ENV production
~~~
請注意,啟用.htaccess將大大降低Apache的速度。如果可能,請使用服務器配置并禁用.htaccess!
##### Nginx的
1. 在中編輯所需的文件
~~~
/ etc / nginx / sites-available
~~~
并添加以下代碼。
~~~
# run this application in production mode
location ~ \.php$ {
fastcgi_param FUEL_ENV production;
}
~~~
##### IIS
在IIS中配置環境變量要復雜得多,您必須知道如何處理鼠標!;-)
您可以查看[此頁面](https://www.iis.net/configreference/system.webserver/fastcgi/application/environmentvariables/environmentvariable#003a)的方法。
#### 使用/fuel/app/bootstrap.php設置環境
如果無法使用FUEL_ENV服務器變量設置環境,則可以在*fuel / app / bootstrap.php中*手動更改設置。
~~~
// Inside fuel/app/bootstrap.php
/**
* Your environment. Can be set to any of the following:
*
* Fuel::DEVELOPMENT
* Fuel::TEST
* Fuel::STAGING
* Fuel::PRODUCTION
* Any string you want, for example, a developer name (mike_dev)
*
*/
Fuel::$env = (isset($_SERVER['FUEL_ENV']) ? $_SERVER['FUEL_ENV'] : Fuel::PRODUCTION);
~~~
請注意,使用此代碼時,設置環境變量的優先級!
### 使用oil時設定環境
FuelPHP的Oil不使用為您的應用程序設置的相同環境。每次運行Oil實例時,必須單獨設置Oil進入的環境。以下說明告訴您如何執行此操作。如果要為應用程序設置環境,請參閱使用服務器環境變量設置環境(推薦)或使用*/fuel/app/bootstrap.php*設置環境
使用\* unix操作系統時,可以env在啟動機油之前使用命令定義變量。
~~~
$ env FUEL_ENV=production php oil -v
~~~
據說,使用Windows時,此方法有效:
~~~
C:\> set FUEL_ENV=production && php oil -v
~~~
### 獲取當前環境
您可以使用**\ Fuel :: $ env以**編程方式檢索當前環境。
不要使用**$ _SERVER ['FUEL_ENV']**。如果不設置環境,它將不起作用。使用$ _SERVER是不可靠的,因為它可能不存在,或者可能在代碼中被覆蓋(這使其與\ Fuel :: $ env不同)。
~~~
// comparing current appliation environment to a predefinded environment
if(\Fuel::$env == \Fuel::PRODUCTION)
{
//do something
}
// comparing current appliation environment to a custom environment
if(\Fuel::$env == "mike_dev")
{
//do something
}
~~~