CodeIgniter系统流程

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

进入框架入口文件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‘;

[email protected]黑眼诗人 <www.chenwei.ws>---------------------------------

进入系统初始化文件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();        //关闭数据库连接
}

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

CodeIgniter系统流程,布布扣,bubuko.com

时间: 2024-10-03 10:38:44

CodeIgniter系统流程的相关文章

佩特来项目经验小集合(5)___系统流程设计

在佩特来项目设计中有一个流程设计问题,虽然.NET 和Java都有工作流,但是考虑到这个项目小,这里就简单的借用一点工作流的思想,设计了几张表,然后通过代码来控制流程.下面以"维修鉴定单业务流程"中的有实物流程为例,谈一下具体的流程设计.有实物的维修鉴定业务流程包含大致步骤:代理商填单.打印二维码.拆包.沟通转办.拆分.故障分析.各角色对费用进行审批.费用提交到费用池(统计各代理商金钱的地方).维修鉴定单流程见下图: 因为系统中不止这一个业务流程,所以系统流程设计的表有任务表(如维修鉴

机顶盒加密系统流程 ECM EMM CW SK

随着数字视频广播(DVB)的发展,观众会面对越来越多的数字电视节目的选择.而广播业者由于投资成本的增加,则要求对用户收取一定的收视费用.条件接收系统(Conditional Access System)就是为了满足对某些广播服务实施接入控制的系统.它的主要功能就是确保只有支付了或者即将支付费用的用户才能收看所选择的电视节目. 1 CA系统的关键技术 在CA系统中,有两项最为关键的技术:一是加扰(Scrambling)和解扰(Descrambling)的方法.加解扰技术被用来在发送端CA系统的控制

mout系统流程

mount()的最后一个参数data是传给文件系统解释的,有兴趣可以跟踪一下系统调用mount的流程(以vfat为例): sys_mount()-->do_mount()-->do_add_mount()-->do_kern_mount()-->do_kern_mount()-->get_sb_bdev()-->vfat_read_super()-->fat_read_super()-->parse_options()(此时会解释iocharset,code

公司系统流程

今日总结: 公司系统流程大致如下:1.业务员或者客户经理从各种渠道获取客户信息   2.由客户经理或业务员对客户的信息进行录入 3.由客户经理对业主进行沟通,获取客户的认可,交付定金 4.设计师结合业主的房屋格局进行室内设计,经过业主认可后客户经理给出工程报价 5.给客户提交工程方案,再签订施工合同 6.客户支付首款,交由财务审核,审核通过后派施工队到施工现场施工 7.施工队结合施工方案向辅材库提取施工材料

asp.net 微信企业号办公系统-流程设计--流转条件设置(路由)

当一个步骤后面有多个步骤时,可以设置为根据设置条件系统自动判断该流向哪些步骤,也叫路由. 工作流没有单独的路由步骤来设置条件,流程条件通过双击连线弹出条件设置框来设置. 1.sql条件 即通过sql条件来判断条件是否满足,条件对应的表为流程对应的表. 2.组织机构 通过当前人员在组织机构中的关系来判断条件是否满足. 3.自定义方法 该方法的使用和参数与步骤中的事件相同. 注意:如果要使设置的条件生效需要在步骤设置中将流转类型设置为:系统控制 系统会根据您设置的条件自动判断该发送到哪些步骤.

asp.net 微信企业号办公系统-流程设计--流程步骤设置-策略设置

策略设置包括当前步骤的流转方式,处理人员,退回策略等设置. 流转类型:当前步骤后面有多个步骤时,此类型选择可以决定后续步骤的发送方式. 1.系统控制:由系统根据您在线上设置的流转条件来判断该发送到哪一步(线上的条件设置将在后面说明). 2.单选一个分支流转:后面有多个步骤时当前处理人员只能选择发送到后面的某一个步骤. 3.多选几个分支流转:后面有多个步骤时当前处理人员可以多选发送到后面的某几个或全部步骤. 运行时选择:是否允许该步骤处理人员在发送到下一步的时候选择接收人员,如果设置为不允许则只能

asp.net 微信企业号办公系统-流程设计--流程步骤设置-基本设置

流程属性设置完成后点击确定之后,即可进行流程步骤设置了. 点击工具栏上的步骤按钮,即可添加一个新步骤. 在新步骤图形上双击即可弹出该步骤相应属性设置框. 步骤ID:系统自动为该步骤生成的唯一ID. 步骤名称:该步骤的名称. 意见显示:是否在审批表单的底部显示历史步骤的审批意见,如果选择了显示则会如下图显示历史意见: 审签类型:无签批意见栏:在表单底部没有签批意见栏,该步骤不需要签批意见即可发送,有签批意见栏(无须签章):在表单底部有签批意见栏,但没有签章按钮,此步骤需要签意见,但不须要签章,有签

asp.net 微信企业号办公系统-流程设计-流程属性设置

打开流程设计器点击新建流程后会弹出新流程属性设置框,属性设置包括基本信息,数据连接和标识字段三项设置. 1.基本信息 流程ID:系统自动给每个流程分配的一个唯一ID. 流程名称:给您的新流程取一个名称. 流程分类:流程的分类管理,此分类在数据字典中维护. 管理者:指定该流程的管理者,管理者可以修改和删除该流程. 实例管理者:该流程的实例管理者,管理者可以查看该流程的处理过程和人工干预该流程的流转,如中途指派,强制退回等. 删除已完成:当流程实例完成后是否从任务表中删除该流程实例的审批过程. 设计

[课程设计]Scrum 1.2 Spring 计划&amp;系统流程&amp;DayOne燃尽图

多鱼点餐系统WEB Spring 计划 ● 产品BACKLOG 多鱼点餐系统产品BACKLOG ID Name Imp Est How to demo Notes 1 设计框架结构 10 8 利用美学对框架结构进行人性化设计 使用DW表单排版设计页面,进行结构划分 2 首页欢迎界面排版设计 5 10 进入首页界面有相册墙介绍店面,增加icon图标按钮 使用DW表单排版设计,easyicon图标,photoshop美化 3 滚动欢迎界面 5 2 输入内容出现文字滚动 html滚动文本marquee