首先,我们来分析一下codeigniter,这个框架素来以上手容易,轻量级著称,算是一个不错的框架,但是如果仅仅停留在会用的层面,而不分析它的源代码,那么肯定是不能够领略其精髓的,而且它的源码并不多,核心代码更是不算多.我们一步步的分析它,希望我们能够理清一个层次.
然后,我们开始工作吧,在分析它的时候,需要分清轻重,具体来说,就是要弄懂这个框架的整体结构,至于那些助手类和其他类库,则属于非核心内容,用在任何一个框架里都有很强的适用性,当然可能会有点变动.
接下来,分析一下我们都需要分析那些东西,第一个要分析的就是index.php,注意是顶级目录下的index.php,然后就是system文件夹下的core,这是这个框架和其他框架有着显著不同的一个地方,因此需要好好分析,弄清它的流程和具体工作步骤,接下来就是database,看看ci是如何封装数据库的,然后就是application里的config,因为我们都知道,我们的数据主要来自于三个地方:第一个就是数据库,第二个是配置文件,第三个就是其他提供数据服务的网站,因此,配置文件非常重要.这几个地方注意到了,接下来就是它的mvc的实现方法的分析,不过很可惜的是,在codeigniter里面,并没有提供任何的模板,因此,这一点我也不说它的好坏了,总之这就是ci框架的精髓了.
第一节的话我们分析顶级目录下的index.php,这个文件及其简单,它的作用如下:
第一,它是保证单一入口的一个有力武器,它定义了一个常量,就是"BASEPATH",以后的文件基本上都会检测是否定义该常量,通过它来判断是否是从该入口文件进入的,防止恶意调用.
第二,定义环境,分为开发环境,测试环境,产品环境,根据不同的环境定义不同的报错级别,当然还可能有诸如日志记录等等不同的方面方便我们操作,这个常量也是必不可少的.
第三,定义文件后缀,可能有人会说为什么需要这个,很简单,以前php文件的后缀不是.php,而是.php3,所以,为了考虑到以后的版本问题是否会出现后缀名不兼容的情况,因此多了一个这个变量.
第四,定义cli模式,如果没接触过cli模式的话,也无所谓,它是一个命令行的形式来运行php文件,其实我们做web开发,可以避开这一方式,就是它是可以被替代的,但是cli模式运行更方便一些(在某些情况下).
好的,接下来就是我对index.php文件的注释.
-
<?php
-
//定义开发环境为开发环境
-
define('ENVIRONMENT', 'development');
-
-
-
//根据环境来设置报错级别
-
if (defined('ENVIRONMENT'))
-
{
-
switch (ENVIRONMENT)
-
{
-
case 'development'://如果是开发环境,则报所有错误
-
error_reporting(E_ALL);
-
break;
-
-
case 'testing':
-
case 'production'://测试和产品则不报错
-
error_reporting(0);
-
break;
-
-
default://其他情况说明环境指示错误
-
exit('The application environment is not set correctly.');
-
}
-
}
-
-
-
//设置系统路径
-
$system_path = 'system';
-
-
//应用程序文件
-
$application_folder = 'application';
-
-
-
-
// 为cli设置当前路径.
-
if (defined('STDIN'))
-
{
-
chdir(dirname(__FILE__));
-
}
-
-
if (realpath($system_path) !== FALSE)
-
{
-
$system_path = realpath($system_path).'/';
-
}
-
-
// 确保路径的尾部有一个斜线.
-
$system_path = rtrim($system_path, '/').'/';
-
-
// 判断系统路径是否正确.
-
if ( ! is_dir($system_path))
-
{
-
exit("Your system folder path does not appear to be set correctly. Please open the following file and correct this: ".pathinfo(__FILE__, PATHINFO_BASENAME));
-
}
-
-
-
// 定义"这个"文件.
-
define('SELF', pathinfo(__FILE__, PATHINFO_BASENAME));
-
-
//定义扩展名
-
define('EXT', '.php');
-
-
//定义系统文件路径
-
define('BASEPATH', str_replace("\\", "/", $system_path));
-
-
// 定义前台的控制器
-
define('FCPATH', str_replace(SELF, '', __FILE__));
-
-
//定义系统文件夹
-
define('SYSDIR', trim(strrchr(trim(BASEPATH, '/'), '/'), '/'));
-
-
-
// 定义应用程序文件夹
-
if (is_dir($application_folder))
-
{
-
define('APPPATH', $application_folder.'/');
-
}
-
else
-
{
-
if ( ! is_dir(BASEPATH.$application_folder.'/'))
-
{
-
exit("Your application folder path does not appear to be set correctly. Please open the following file and correct this: ".SELF);
-
}
-
-
define('APPPATH', BASEPATH.$application_folder.'/');
-
}
-
-
//开始执行我们的程序
-
require_once BASEPATH.'core/CodeIgniter.php';
阅读(956) | 评论(0) | 转发(0) |