------------------------------------------------------------------------------------------------------

进入框架入口文件index.php =>

定义应用的当前环境(用于设置错误模式):define('ENVIRONMENT', 'development');

设置系统文件目录名:$system_path = 'system';

设置应用文件目录名:$application_folder = 'application';  //可自定义

定义当前文件名常量:define('SELF', pathinfo(__FILE__, PATHINFO_BASEPATH));

定义PHP文件后缀常量:define('EXT', '.php');  //这个全局常量不推荐使用

定义系统目录路径常量:define('BASEPATH', str_replace('\\', '/', $system_path));

定义前端控制器文件路径常量:define('FCPATH', str_replace(SELF, '', __FILE__));

定义系统目录名常量:define('SYSDIR', trim(strchr(trim(BASEPATH, '/'), '/'), '/'));

定义应用目录路径常量:define('APPPATH', BASEPATH.$application_folder.'/');

加载引导文件:require_once BASEPATH.'core/CodeIgniter.php';

---------------------------------@黑眼诗人 <www.farwish.com>---------------------------------

进入系统初始化文件CodeIgniter.php =>

define('CI_VERSION', '2.2.0');

define('CI_CORE', FALSE);

require(BASEPATH.'core/Common.php');   //引入公共函数库文件,包含load_class()等函数

require(APPPATH.'config/'.ENVIRONMENT.'/constants.php'); //引入框架常量文件,文件和目录模式 & 文件流模式

set_error_handler('_exception_handler');   //定义一个自定义错误处理程序以便记录PHP错误

if ( ! is_php('5.3'))
{
  @set_magic_quotes_runtime(0); // Kill magic quotes
}

if (isset($assign_to_config['subclass_prefix']) AND $assign_to_config['subclass_prefix'] != '')

//设置子类前缀
{
  get_config(array('subclass_prefix' => $assign_to_config['subclass_prefix']));
}

if (function_exists("set_time_limit") == TRUE AND @ini_get("safe_mode") == 0)

//设置一个自由的脚本执行时间限制
{
  @set_time_limit(300);
}

$BM =& load_class('Benchmark', 'core');

//实例化Benchmark基准类,此类使你可以标记点并计算它们之间时间差,内存消耗也可以显示

$BM->mark('total_execution_time_start');

//基准标记,总执行时间开始:$this->marker['total_execution_time_start'] = microtime();
$BM->mark('loading_time:_base_classes_start');

//基准标记,加载的时间:$this->marker['loading_time:_base_classes_start'] = microtime();

$EXT =& load_class('Hooks', 'core');    //实例化Hooks钩子类,提供一种不堆砌来扩展基础系统的机制

$EXT->_call_hook('pre_system');     //调用指定钩子pre_system

$CFG =& load_class('Config', 'core');   //实例化Config配置类,包含管理配置文件的方法

if (isset($assign_to_config))
{
  $CFG->_assign_to_config($assign_to_config);

  //调用Config.php中_assign_to_config方法,保证配置项通过变量被分配 和 重写
}

$UNI =& load_class('Utf8', 'core');    //实例化Utf8类,对UTF-8环境提供支持

$URI =& load_class('URI', 'core');    //实例化URI类,解析URI 和 决定路由

$RTR =& load_class('Router', 'core'); //实例化Router路由类,解析URI 和 决定路由

$RTR->_set_routing();        //这个函数确定什么应该是基于URI请求,以及 路由配置文件中设置的路由

if (isset($routing))
{
  $RTR->_set_overrides($routing); //设置控制器覆盖
}

$OUT =& load_class('Output', 'core');  //实例化Output输出类,负责发送最终的输出到浏览器

if ($EXT->_call_hook('cache_override') === FALSE)
{
  if ($OUT->_display_cache($CFG, $URI) == TRUE)
  {
    exit;               //检测是否有缓存文件,如果有,直接退出当前脚本
  }
}

$SEC =& load_class('Security', 'core');  //实例化Security安全类

$IN =& load_class('Input', 'core');    //实例化Input输入类,为了安全对全局输入数据预处理  

$LANG =& load_class('Lang', 'core');   //实例化Lang语言类

require BASEPATH.'core/Controller.php';, //引入 基础控制器类

function &get_instance()
{
  return CI_Controller::get_instance(); //返回静态变量$instance
}

if (file_exists(APPPATH.'core/'.$CFG->config['subclass_prefix'].'Controller.php'))
{
  require APPPATH.'core/'.$CFG->config['subclass_prefix'].'Controller.php';

  //引入自定义扩展 基础控制器类
}

if ( ! file_exists(APPPATH.'controllers/'.$RTR->fetch_directory().$RTR->fetch_class().'.php'))
{
  show_error('Unable to load your default controller. Please make sure the controller specified in your Routes.php file is valid.');
}

include(APPPATH.'controllers/'.$RTR->fetch_directory().$RTR->fetch_class().'.php');

//加载本地控制器

$BM->mark('loading_time:_base_classes_end');

//基准标记,加载的时间结束:$this->marker['loading_time:_base_classes_end'] = microtime();

安全检查

$EXT->_call_hook('pre_controller');  //调用"pre_controller" hook

$BM->mark('controller_execution_time_( '.$class.' / '.$method.' )_start'); //基准标记,控制器执行时间标记点

$CI = new $class();  //实例化请求控制器

$EXT->_call_hook('post_controller_constructor'); //调用"post_controller_constructor" hook

调用请求的方法

$BM->mark('controller_execution_time_( '.$class.' / '.$method.' )_end'); //基准标记,控制器执行时间结束标记点

$EXT->_call_hook('post_controller');  //调用"post_controller" hook

if ($EXT->_call_hook('display_override') === FALSE)
{
  $OUT->_display();      //发送最后的渲染输出到浏览器
}

$EXT->_call_hook('post_system');  //调用"post_system" hook

if (class_exists('CI_DB') AND isset($CI->db))
{
  $CI->db->close();        //关闭数据库连接
}

-------------------------------------------------------------------------------------------------

[CI]CodeIgniter系统流程的更多相关文章

  1. CodeIgniter框架——CI的执行流程

    应用程序流程图 CodeIgniter执行流程 源码分析——CI到底做了些什么 (由welcome的例子出发——讲解index.php——讲解CodeIgniter.php) (load_class的 ...

  2. Docker最全教程之使用TeamCity来完成内部CI、CD流程(十六)

    本篇教程主要讲解基于容器服务搭建TeamCity服务,并且完成内部项目的CI流程配置.教程中也分享了一个简单的CI.CD流程,仅作探讨.不过由于篇幅有限,完整的DevOps,我们后续独立探讨. 为了降 ...

  3. PHP框架CI CodeIgniter 的log_message开启日志记录方法

    PHP框架CI CodeIgniter 的log_message开启日志记录方法 第一步:index.php文件,修改环境为开发环境define(‘ENVIRONMENT’, ‘development ...

  4. CI CD系统整合

    转载_CI 系统搭建:Git.Gerrit与Jenkins 2014-08-11 20:55 15678人阅读 评论(1) 收藏 举报 分类: 软件集成和项目管理(3) 目录(?)[+] 去年写的这五 ...

  5. Rancher 构建 CI/CD 自动化流程 - 动态配置 Jenkins-slave(二)

    一.说明 1.1 说明 前面介绍采用 Jenkinsfile + KubernetesPod.yaml 方式进行部署项目(Rancher 构建 CI/CD 自动化流程 - 动态配置 Jenkins-s ...

  6. 基于 Kubernetes 实践弹性的 CI/CD 系统

    大家好,我是来自阿里云容器服务团队的华相.首先简单解释一下何为 Kubernetes 来帮助大家理解.Kuberentes 是一个生产可用的容器编排系统.Kuberentes 一方面在集群中把所有 N ...

  7. 用 GitHub Action 构建一套 CI/CD 系统

    ​ 缘起 Nebula Graph 最早的自动化测试是使用搭建在 Azure 上的 Jenkins,配合着 GitHub 的 Webhook 实现的,在用户提交 Pull Request 时,加个 r ...

  8. Gitea 与 Jenkins 的集成实践,打造你的专属 CI/CD 系统

    前言 Gitea 是一个用于代码托管的轻量级单体程序,它能与现有的经典应用集成,诸如代码分析工具 SonarQube.持续集成工具 Drone.Jenkins 以及用于工单管理的客户端插件(VSCod ...

  9. 升鲜宝V2.0_生鲜配送行业,对生鲜配送行业的思考及对系统流程开发的反思_升鲜宝生鲜配送系统_15382353715_余东升

    升鲜宝V2.0_生鲜配送行业,对生鲜配送行业的思考及对系统流程开发的反思_升鲜宝生鲜配送系统_15382353715_余东升 -----生鲜配送行业现状及存在问题----- 1.  从业者整体素质偏低 ...

随机推荐

  1. 10 Skills Every SharePoint Developer Needs

    10 Skills Every SharePoint Developer Needs(原文) This blog post guides you through the essential skill ...

  2. USACO 2008 Running(贝茜的晨练)

    [题解] 动态规划,dp[i][j]表示第i分钟疲劳度为j的最长距离. [代码] #include <iostream> #include <cstdlib> #include ...

  3. Hibernate 抓取策略

    抓取策略: 为了改变SQL语句执行的方式 当应用程序需要在Hibernate实体对象的关联关系间进行导航的时候,Hibernate如何获取关联对象的策略 抓取策略可以在O/R映射的元数据中声明,也可以 ...

  4. c# 未能加载文件或程序集

    最近做项目时碰到这个问题了,goole.百度了半天,整理了以下几种可能: DLL文件名与加载时的DLL文件名不一致, DLL文件根本不存在,即出现丢失情况, 加载DLL路径错误,即DLL文件存在,但加 ...

  5. openstack cpu pinning

    为了减少CPU竞争,提高CPU cache命中率,可以把guest的vcpu pin到host的物理CPU上. 在openstack中,可以添加以下到flavor extra specs: hw:cp ...

  6. Python NLTK——python与nltk配置

    按照<Python自然语言处理>中的步骤安装Python后nltk总是部署失败,出现如下提示: >>> import nltk Traceback (most recen ...

  7. pycharm的各种设置,配置

      http://blog.csdn.net/pipisorry/article/details/39909057# 目录(?)[+] pycharm学习技巧 Learning tips PyChar ...

  8. 十年阿里java架构师的六大设计原则和项目经验

      先看一幅图吧: 这幅图清晰地表达了六大设计原则,但仅限于它们叫什么名字而已,它们具体是什么意思呢?下面我将从原文.译文.理解.应用,这四个方面分别进行阐述. 1.单一职责原则(Single Res ...

  9. java BASE64流 输出图片。

    亲测3个请求都可用,没有测试性能问题.仅供参考 BASE64Decoder Eclipsse 类可能引用不了解决方案链接:http://blog.csdn.net/JBxiaozi/article/d ...

  10. python中的type

    我们常用type()来查看类型,使用方法如下: 1 a = "zzzq" 2 b = 1 3 c = (1, "zzq123") 4 d = [2, " ...