## 基础文件定义
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文件用来测试,内容如下:
![](https://img.kancloud.cn/78/b3/78b357c391a767a1db00d69fc3c1b055_570x444.png)
> .env文件打印结果如下:
![](https://img.kancloud.cn/be/1f/be1f7046682d34d87e214320520c56f6_275x242.png)
```
// 我的根目录是/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);
![](https://img.kancloud.cn/8c/28/8c28075cf102adb430417aec3d456935_704x582.png)
> 由此可见,让我们继续了解下一章节 `Config.php`,看下是如何加载配置文件的