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

  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 */
上一篇:【iOS】NSNumberFormatter


下一篇:twemproxy源码分析1——入口函数及启动过程