## 环境
> 环境的支持可帮助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
}
~~~