博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

CodeIgniter框架——源码分析之入口文件index.php

Posted on 2014-08-19 11:18  xymaqingxiang  阅读(854)  评论(0编辑  收藏  举报

  CodeIgniter框架的入口文件主要是配置开发环境,定义目录常量,加载CI的核心类core/CodeIgniter.php。

   在index.php中,CI首先做的事情就是设置PHP的错误报告,上来都是E_ALL,如果不想让所有问题都显示,改改’ENVIRONMENT‘,如development,testing,production即可。接下来定义了两个变量"system_path"和"application_folder",用来指定system文件夹的名字和applicant文件夹的名字。然后CI用system文件夹变量的内容转为完全的路径。最后定义一些常量,并把接下来的工作完全交给CodeIgniter.php这个文件。

 源码分析如下:

<?php
//这个文件是入口,后期所有的文件都要在这里执行。
/*-----------------------------------------------
 * 系统环境配置常量
 * 能够配置错误显示级别
 * -----------------------------------------------
 * 默认情况下:
 *     development //开发环境报告所有错误
 *     testing     //测试环境不报告错误
 *     production  //生产环境不报告错误
 */
    define('ENVIRONMENT', 'development');
 
/*
 * 根据环境常量打开不同的错误显示级别
 */
    switch (ENVIRONMENT){
        case 'development':
            error_reporting(E_ALL);
        break;
 
        case 'testing':
        case 'production':
            error_reporting(0);
        break;
 
        default:
            exit('应用的环境设置错误.');
    }
 
/*
 * ---------------------http://i.cnblogs.com/?postid=3921349&update=1
 * 系统文件目录,可以自定义
 * --------------------
 * 默认情况下是"system"文件夹,并且在相对于index.php文件同一个目录下。
 * 你可以更改这个路径,但是路径必须与你的系统文件所在位置一致
 *
 * 不需要后面的斜杠"/";
 */
 
    $system_path = 'system';
 
/*
 *---------------------------------------------------------------
 * 应用程序目录
 *---------------------------------------------------------------
 *
 * 这个文件夹是放置程序的地方,默认情况是“application”文件夹,可以重命名或重定位到服务器上的任何位置。
 * 详情可以访问:
 * http://codeigniter.com/user_guide/general/managing_apps.html
 *
 * 不需要后面的斜杠"/";
 *
 */
 
    $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("你的系统目录未设置正确. 请打开以下文件重新设置: ".pathinfo(__FILE__, PATHINFO_BASENAME)); } /* * ------------------------------------------------------------------- * 设置路径(目录)常量 * ------------------------------------------------------------------- */ // 获得当前文件名,即定义入口文件名 define('SELF', pathinfo(__FILE__, PATHINFO_BASENAME)); // php文件扩展名
  //不推荐使用全局常量
define('EXT', '.php'); // 系统目录常量 define('BASEPATH', str_replace("\\", "/", $system_path)); // 前端控制器路径常量,即入口文件的目录 define('FCPATH', str_replace(SELF, '', __FILE__)); // 系统核心目录名
  //trim(BASEPATH, '/')用来去掉首尾的‘/’————trim()函数从字符串的两端删除空白字符和其他预定义字符
  //strrchr()函数查找字符串在另一个字符串中最后一次出现的位置,并返回从该位置到字符串结尾的所有字符
define('SYSDIR', trim(strrchr(trim(BASEPATH, '/'), '/'), '/')); //定义应用目录常量 if (is_dir($application_folder)){ define('APPPATH', $application_folder.'/'); }else{ if ( ! is_dir(BASEPATH.$application_folder.'/')){ exit("你的应用程序目录可能未设置正确. 请打开以下文件设置: ".SELF); } define('APPPATH', BASEPATH.$application_folder.'/'); } /* * -------------------------------------------------------------------- * 载入自举文件 * -------------------------------------------------------------------- */
//前面都是定义环境和定义常量,现在开始加载CI核心文件,开始真正的CI之旅
require_once BASEPATH.'core/CodeIgniter'.EXT; /* End of file index.php */ /* Location: ./index.php */