|
本帖最后由 imwebmaster.net 于 2012-5-12 17:33 编辑
CI版本:2.1.0准备:将CodeIgniter包 重命名为ci ,并放在环境根目录下 , /ci 。引导程序文件:/ci/system/core/CodeIgniter.php
功能:咋说呢?
1.加载全局函数
PHP复制代码 require(BASEPATH.'core/Common.php') 复制代码
load_class(),get_config() ,show_404(),等全局函数位于文件/ci/system/core/Common.php 链接到 Common.php
2.加载框架常量
PHP复制代码
if(defined('ENVIRONMENT') AND file_exist (APPATH .'config/' . ENVIRONMENT . '/constants.php')
{
require( APPATH . 'config/' . ENVIRONMENT . '/constants.php' );
}
else
{
require(APPATH . ''config /constants .php );
}
复制代码
文件 :/ci/application/config/constants.php
连接到constants.php
3. 设置自定义处理程序
函数 _exception_handler() , is_php() 都位于 /ci/system/core/Common.php 。详情点击
set_magic_quotes_runtime() 用来设置当前活动配置指令magic_quotes_runtime ,1 for on ,0 for off.
启用magic_quotes_runtime 参数时,所有来着外部资源(如数据库或文本文件)的数据中的引号都会自动转义。这个特性长期一来总会导致混乱,PHP5.3.0已将其移除,所以用is_php('5.3')来侦测版本,就是这个原因啦,对吧?
PHP 基础
魔法引号除了magic_quotes_runtime 指令外,还有两个魔法引号相关的指令:
magic_quotes_gpc:是否对GET,POST,COOKIE 传入的数据启用魔法引号,启用时所有的单引号,双引号,反斜线和空字符都是用反斜线自动转义
magic_quotes_sybase :启用时来自外部资源数据将使用单引号转义。magic_quotes_runtime 开启时才有效。
开?
启用魔法引号减少SQL注入的可能性(当然还是有可能),减少了一定的系统风险。当向数据库中插入数据时,魔术引号所做的就是自动对所有的 GET、POST、COOKIE 数据运用 addslashes() 函数。
还是关?
对于所有进入PHP的都被转义的话,肯定会影响到PHP的性能,只在运行时调用转义函数addslashes() 更有效率。
关了吧,请注意magic_quotes_gpc, 作用域:PHP_INI_SYSTEM ,所以只能在系统级关闭哦,运行时不能关。
@ 错误控制运算符
当将其放置在一个 PHP 表达式之前,该表达式可能产生的任何错误信息都被忽略掉。
4.设置子类前缀
PHP复制代码
if( isset($assign_to_config['subclass_prefix'] and $assign_to_config['subclass_prefix'] != '' )
{
get_config (array('subclass_prefix' =>$assign_to_config['subclass_prefix'] ));
}
复制代码
如果你不懂子类是个啥意思 ,请参见 /ci/user_guide/general/creating_libraries.html EXTEND NATIVE LIBRARIES
你还记得 $assign_to_config 在哪来着不?
5.设置脚本最大执行时间
PHP基础
set_time_limit(300) 函数 用来设置当前脚本本身的最大执行时间,该时间并不包括流操作,执行系统命令,数据库查询等的时间,单位为秒。另外,该函数在安全模式下无效,这也是为什么要判断safe_mode了。
另外有一点不明白,set_time_limit 在PHP4,5 中都是存在的,而CI 2.1.0 需求在>= PHP5.1.6,为什么要判断函数是否存在呢?谁知道赶紧告诉我啊。谢谢
6.开启计时器
PHP复制代码
$BM =& load_class('Beachmark','core');
$BM->mark('总执行时间');
$BM->mark('加载时间:基类_开始');
复制代码
从/ci/system/core加载Beachmark类,实例化并返回实例引用,load_class() 这个很重要哦
$BM->mark() 用来设置计时点。
如果不懂,请参见手册 :
/ci/user_guide/general/profiling.html 性能分析
ci/user_guide/libraries/benchmark.html 基准测试
扩展:
我好想记得PEAR 有一个Beachmark包,用与性能测试。
7.加载Hook类
PHP复制代码 $EXT =& load_class('Hook','core');
复制代码
HOOK 提供在不修改框架内核文件的情况下,修改框架的内部工作 。啥意思啊?查看一下CI的流程图/ci/user_guide/overview/appflow.html 。如果你想在执行流程的某处执行一段特殊脚本,那么就可以利用HOOK的特性。
CI 提供了7‘处’这样的地方 即 HOOK POINT ,参见手册ci/user_guide/general/hooks.html , 按照手册自己做个实验哦就明白了。
如何使用HOOK ,暂时还没有太多的概念,继续努力咯 {:soso_e101:}
8.Hook point => pre_system
PHP复制代码
$EXT-> _call_hook('pre_system')
复制代码
9.实例化Config类
PHP复制代码 $CFG =& load_class ('Config' ,'core') ;
if(isset($assign_to_config) )
{
$CFG->_assign_to_config ($assign_to_cofing) ;
}
复制代码
10. 实例化UTF-8类
PHP复制代码
$UNI =& load_class('Utf8', 'core');
复制代码
11. 实例化Uri类
PHP复制代码
$URI =& load_class('URI' ,'core');
复制代码
解析URL,并确定路由选择
12.实例化 Router类
PHP复制代码
$RTR =& load_class ('Router', 'core');
$RTR->_set_rounting ();
if (isset($routing))
{
$RTR->_set_overrides ($routing);
}
复制代码
设置路由选项
13.实例化Output类
PHP复制代码
$OUT =& load_class('Output', 'core')
复制代码
14.查找是否存在缓存文件,如果有输出缓存文件并推出
PHP复制代码
if($EXT->call_hook('cache_override') === FALSE)
{
if($OUT->_display_cache ($CFG, $URL) == TRUE)
{
exit;
}
}
复制代码
15.加载Security类提供 xss ,csrf 支持
PHP复制代码
$SEC =& load_class('Security', 'core');
复制代码
16.加载Input 类,净化全局变量
PHP复制代码
$IN =& load_class('Input', 'core');
复制代码
17.加载Lang类
PHP复制代码
$LANG =& load_class('Lang', 'core');
复制代码
18.加载AppController 和 Local Controller
PHP复制代码
require BASEPATH .'core/Controller.php';
function &get_instance ()
{
return CI_Controller ::get_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 ('无法加载你的默认控制器. 请确定你已经在Routes.php设置了默认控制器? .');
}
include(APPPATH .'controllers/'.$RTR->fetch_directory().$RTR->fetch_class().'.php');
$BM->mark('加载时间: 基类_结束'); //还记得那个 基类_ 开始 在哪设的吗 ?
复制代码
19. 安全检查
20. Hook point ->pre_controller
PHP复制代码 $EXT->_call_hook('pre_controller'); 复制代码
21.实例化请求控制器
PHP复制代码
$BM->mark('controller_execution_time_( '.$class.' / '.$method.' )_start');
$CI = new $class();
复制代码
22.Hook point ->post_controller_constructor
PHP复制代码 $EXT->_call_hook('post_controller_constructor'); 复制代码
23.调用请求控制器方法method
PHP复制代码 [/code] [b][color=#ff0000]
[/color][/b]
[b][color=#2e8b57]24.Hook point-> post_controller
[code=PHP]$EXT->_call_hook('post_controller'); 复制代码
25.发送最终输出至浏览器
PHP复制代码
if ($EXT->_call_hook('display_override') === FALSE)
{
$OUT->_display();
}
复制代码
26.Hook point-> post_system
PHP复制代码
$EXT->_call_hook('post_system');
复制代码
27.关闭DB连接
|
评分
-
查看全部评分
|