Chinaunix首页 | 论坛 | 博客
  • 博客访问: 51196
  • 博文数量: 12
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 142
  • 用 户 组: 普通用户
  • 注册时间: 2013-09-16 21:18
文章分类

全部博文(12)

文章存档

2015年(1)

2014年(1)

2013年(10)

我的朋友

分类: PHP

2013-09-19 00:06:18

    首先,我们来分析一下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文件的注释.

点击(此处)折叠或打开

  1. <?php
  2.     //定义开发环境为开发环境
  3.     define('ENVIRONMENT', 'development');
  4.     
  5.     
  6.     //根据环境来设置报错级别
  7. if (defined('ENVIRONMENT'))
  8. {
  9.     switch (ENVIRONMENT)
  10.     {
  11.         case 'development'://如果是开发环境,则报所有错误
  12.             error_reporting(E_ALL);
  13.         break;
  14.     
  15.         case 'testing':
  16.         case 'production'://测试和产品则不报错
  17.             error_reporting(0);
  18.         break;

  19.         default://其他情况说明环境指示错误
  20.             exit('The application environment is not set correctly.');
  21.     }
  22. }


  23.     //设置系统路径
  24.     $system_path = 'system';

  25.     //应用程序文件
  26.     $application_folder = 'application';



  27.     // 为cli设置当前路径.
  28.     if (defined('STDIN'))
  29.     {
  30.         chdir(dirname(__FILE__));
  31.     }

  32.     if (realpath($system_path) !== FALSE)
  33.     {
  34.         $system_path = realpath($system_path).'/';
  35.     }

  36.     // 确保路径的尾部有一个斜线.
  37.     $system_path = rtrim($system_path, '/').'/';

  38.     // 判断系统路径是否正确.
  39.     if ( ! is_dir($system_path))
  40.     {
  41.         exit("Your system folder path does not appear to be set correctly. Please open the following file and correct this: ".pathinfo(__FILE__, PATHINFO_BASENAME));
  42.     }


  43.     // 定义"这个"文件.
  44.     define('SELF', pathinfo(__FILE__, PATHINFO_BASENAME));

  45.     //定义扩展名
  46.     define('EXT', '.php');

  47.     //定义系统文件路径
  48.     define('BASEPATH', str_replace("\\", "/", $system_path));

  49.     // 定义前台的控制器
  50.     define('FCPATH', str_replace(SELF, '', __FILE__));

  51.     //定义系统文件夹
  52.     define('SYSDIR', trim(strrchr(trim(BASEPATH, '/'), '/'), '/'));


  53.     // 定义应用程序文件夹
  54.     if (is_dir($application_folder))
  55.     {
  56.         define('APPPATH', $application_folder.'/');
  57.     }
  58.     else
  59.     {
  60.         if ( ! is_dir(BASEPATH.$application_folder.'/'))
  61.         {
  62.             exit("Your application folder path does not appear to be set correctly. Please open the following file and correct this: ".SELF);
  63.         }

  64.         define('APPPATH', BASEPATH.$application_folder.'/');
  65.     }

  66.     //开始执行我们的程序
  67. require_once BASEPATH.'core/CodeIgniter.php';


阅读(956) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~