## 基礎文件定義
ThinkPHP引導文件位于`thinkphp/base.php`,內容如下:
```
// 基礎常量
define('THINK_VERSION',?'5.0.24');
define('THINK_START_TIME',?microtime(true));
define('THINK_START_MEM',?memory_get_usage());
define('EXT',?'.php');
define('DS',?DIRECTORY_SEPARATOR);
defined('THINK_PATH')?or?define('THINK_PATH',?__DIR__.?DS);
define('LIB_PATH',?THINK_PATH?.'library'.?DS);
define('CORE_PATH',?LIB_PATH?.'think'.?DS);
define('TRAIT_PATH',?LIB_PATH?.'traits'.?DS);
defined('APP_PATH')?or?define('APP_PATH',?dirname($_SERVER['SCRIPT_FILENAME'])?.?DS);
defined('ROOT_PATH')?or?define('ROOT_PATH',?dirname(realpath(APP_PATH))?.?DS);
defined('EXTEND_PATH')?or?define('EXTEND_PATH',?ROOT_PATH?.'extend'.?DS);
defined('VENDOR_PATH')?or?define('VENDOR_PATH',?ROOT_PATH?.'vendor'.?DS);
defined('RUNTIME_PATH')?or?define('RUNTIME_PATH',?ROOT_PATH?.'runtime'.?DS);
defined('LOG_PATH')?or?define('LOG_PATH',?RUNTIME_PATH?.'log'.?DS);
defined('CACHE_PATH')?or?define('CACHE_PATH',?RUNTIME_PATH?.'cache'.?DS);
defined('TEMP_PATH')?or?define('TEMP_PATH',?RUNTIME_PATH?.'temp'.?DS);
defined('CONF_PATH')?or?define('CONF_PATH',?APP_PATH);?//?配置文件目錄
defined('CONF_EXT')?or?define('CONF_EXT',?EXT);?//?配置文件后綴
defined('ENV_PREFIX')?or?define('ENV_PREFIX',?'PHP_');?//?環境變量的配置前綴
//?環境常量
define('IS_CLI',?PHP_SAPI?==?'cli'???true?:?false);
define('IS_WIN',?strpos(PHP_OS,?'WIN')?!==?false);
```
> 基礎文件`base.php`自定義比較重要的基礎常量和環境常量。
## 加載環境變量配置文件
> 本地創建.env文件用來測試,內容如下:

> .env文件打印結果如下:

```
//?我的根目錄是/WWW/tp5/
//?1. 檢查?/WWW/tp5/.env?文件是否是常規的文件
if?(is_file(ROOT_PATH?.'.env'))?{
//?1.?解析配置文件(.env?文件),?并以數組的形式返回其中的設置,?參數true則可以返回多維數組?
$env?=?parse_ini_file(ROOT_PATH?.'.env',?true);
foreach?($env?as?$key?=>?$val)?{
//?2.?ENV_PREFIX?=?PHP_APP_?,?則拼接為?PHP_APP_DEBUG
//?3.?strtoupper?函數是把字符串轉換為大寫
$name?=?ENV_PREFIX?.strtoupper($key);
//?4.?如果值是數組,繼續拼接鍵值
if?(is_array($val))?{
foreach?($val?as?$k?=>?$v)?{
$item?=?$name.'_'.strtoupper($k);
//?5.?putenv?函數是將值添加到服務器環境變量,?環境變量僅存活于當前請求期間,?在請求結束時環境會恢復到初始狀態
putenv("$item=$v");?//?PHP_DATABASE_HOSTNAME=127.0.0.1
?}
}?else?{
putenv("$name\=$val");
}
}
}
//?打印環境變量?PHP_DATABASE_HOSTNAME
//?print_r(getenv("PHP_DATABASE_HOSTNAME"));?//?127.0.0.1
```
## 注冊自動加載
```
// 載入Loader類
require CORE_PATH . 'Loader.php';
\think\Loader::register();
```
> 由此可見,讓我們繼續了解下一章節 `Loader.php`
## 注冊錯誤和異常處理機制
```
// 載入Error類
\think\Error::register();
```
> 由此可見,讓我們繼續了解下一章節 `Error.php`
## 加載慣例配置文件
\think\Config::set(include THINK_PATH . 'convention' . EXT);

> 由此可見,讓我們繼續了解下一章節 `Config.php`,看下是如何加載配置文件的