1 访问index.php 入口文件,定义应用目录,加载框架引导文件

<?php
// [ 应用入口文件 ]
// 定义应用目录
define('APP_PATH', __DIR__ . '/../application/');
// 加载框架引导文件
require __DIR__ . '/../thinkphp/start.php';

2 加载base基础文件,定义目录常量环境常量,加载loader类,注册自动加载,注册错误和异常处理机制,加载惯例配置文件

2.1 注册自动加载机制

    public static function register($autoload = '')
{
// 注册系统自动加载
spl_autoload_register($autoload ?: 'think\\Loader::autoload', true, true);
// 注册命名空间定义
self::addNamespace([
'think' => LIB_PATH . 'think' . DS,
'behavior' => LIB_PATH . 'behavior' . DS,
'traits' => LIB_PATH . 'traits' . DS,
]);
// 加载类库映射文件
if (is_file(RUNTIME_PATH . 'classmap' . EXT)) {
self::addClassMap(__include_file(RUNTIME_PATH . 'classmap' . EXT));
} // Composer自动加载支持
if (is_dir(VENDOR_PATH . 'composer')) {
self::registerComposerLoader();
} // 自动加载extend目录
self::$fallbackDirsPsr4[] = rtrim(EXTEND_PATH, DS);
}

备注:spl_autoload_register

2.2 注册错误和异常处理机制

    /**
* 注册异常处理
* @return void
*/
public static function register()
{
error_reporting(E_ALL); // 设置函数允许错误报告的等级 error_reporting 0 关闭 E_ERROR | E_WARNING | E_PARSE 分别为错误 警告 解析错误 E_ALL 报告所有错误
set_error_handler([__CLASS__, 'appError']); //设置用户自定义的错误处理函数
set_exception_handler([__CLASS__, 'appException']); //设置用户自定义的异常处理函数
register_shutdown_function([__CLASS__, 'appShutdown']); //注册一个会在php中止时执行的函数
}

2.3 加载惯例配置文件

将convention文件中的的配置保存在已数组的形式$config常量中

// 加载惯例配置文件
\think\Config::set(include THINK_PATH . 'convention' . EXT);

2.4执行应用

// 执行应用
App::run()->send();
    /**
* 发送数据到客户端
* @access public
* @return mixed
* @throws \InvalidArgumentException
*/
public function send()
{
// 监听response_send
Hook::listen('response_send', $this); // 处理输出数据
$data = $this->getContent(); // Trace调试注入
if (Env::get('app_trace', Config::get('app_trace'))) {
Debug::inject($this, $data);
} if (200 == $this->code) {
$cache = Request::instance()->getCache();
if ($cache) {
$this->header['Cache-Control'] = 'max-age=' . $cache[1] . ',must-revalidate';
$this->header['Last-Modified'] = gmdate('D, d M Y H:i:s') . ' GMT';
$this->header['Expires'] = gmdate('D, d M Y H:i:s', $_SERVER['REQUEST_TIME'] + $cache[1]) . ' GMT';
Cache::tag($cache[2])->set($cache[0], [$data, $this->header], $cache[1]);
}
} if (!headers_sent() && !empty($this->header)) {
// 发送状态码
http_response_code($this->code);
// 发送头部信息
foreach ($this->header as $name => $val) {
if (is_null($val)) {
header($name);
} else {
header($name . ':' . $val);
}
}
} echo $data; if (function_exists('fastcgi_finish_request')) {
// 提高页面响应
fastcgi_finish_request();
} // 监听response_end
Hook::listen('response_end', $this); // 清空当次请求有效的数据
if (!($this instanceof RedirectResponse)) {
Session::flush();
}
}

最新文章

  1. sql server 创建只读帐号
  2. Linux常用指令---grep(搜索过滤)
  3. C语言绘制余弦函数图象
  4. Java的线程模型
  5. ACE的 日志
  6. AfxMessageBox(&quot;这里为提示框的内容&quot;);程序弹出一个提示窗口,可以做调试提示信息
  7. InputStream中read()与read(byte[] b)(转)
  8. (三)ajax请求不同源之jsonp跨域
  9. SKU : Stock Keeping Unit
  10. JAVA实训第二次作业
  11. 1111. Online Map (30)
  12. bzoj 3991: [SDOI2015]寻宝游戏 虚树 set
  13. multipartUpload上传图片到阿里云
  14. Tomcat之Windows环境下配置多个服务器
  15. 2018.07.22 bzoj3613: [Heoi2014]南园满地堆轻絮(逆序对结论题)
  16. C# 数据上传(自用笔记)
  17. N 秒打开一个新窗口
  18. phpstorm failed to create jvm:error code -6 解决办法 解决方法
  19. mysql转ElasticSearch的分析 及JAVA API 初探
  20. github 上中国互联网公司的开源项目

热门文章

  1. Linux部署PgSQL数据库
  2. SpringBoot整合mybatis快速入门
  3. 【springcloud】springcloud与springboot的版本对应关系
  4. JSP页面添加当前时间
  5. ArcGIS Engine中实现ArcMap的捕捉效果
  6. 【SOE】 ArcGIS Server对象扩展(SOE)开发注意事项
  7. win10 安装mysql5.7 【自定义安装路径】
  8. HDFS Shell基本操作
  9. Mysql 中隐式转换
  10. 用CUDA写出比Numpy更快的规约求和函数