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 */

CodeIgniter框架——源码分析之入口文件index.php的更多相关文章

  1. CodeIgniter框架——源码分析之CodeIgniter.php

    CodeIgniter.php可以说是CI的核心,大部分MVC的流程都是在这个文件夹中处理的,其中加载了很多外部文件,完成CI的一次完整流程. 首先是定义了CI的版本(此处为CI 2.2.0),接下来 ...

  2. CodeIgniter框架——源码分析之Config.php

    CI框架的配置信息被存储在$config数组中,我们可以添加自己的配置信息或配置文件到$config中: $this->config->load('filename'); //加载配置文件 ...

  3. YII框架源码分析(百度PHP大牛创作-原版-无广告无水印)

           YII 框架源码分析    百度联盟事业部——黄银锋 目 录 1. 引言 3 1.1.Yii 简介 3 1.2.本文内容与结构 3 2.组件化与模块化 4 2.1.框架加载和运行流程 4 ...

  4. laravel框架源码分析(一)自动加载

    一.前言 使用php已有好几年,laravel的使用也是有好长时间,但是一直对于框架源码的理解不深,原因很多,归根到底还是php基础不扎实,所以源码看起来也比较吃力.最近有时间,所以开启第5.6遍的框 ...

  5. Android Small插件化框架源码分析

    Android Small插件化框架源码分析 目录 概述 Small如何使用 插件加载流程 待改进的地方 一.概述 Small是一个写得非常简洁的插件化框架,工程源码位置:https://github ...

  6. Spark RPC框架源码分析(一)简述

    Spark RPC系列: Spark RPC框架源码分析(一)运行时序 Spark RPC框架源码分析(二)运行时序 Spark RPC框架源码分析(三)运行时序 一. Spark rpc框架概述 S ...

  7. 介绍开源的.net通信框架NetworkComms框架 源码分析

    原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架  作者是英国人  以前是收费的 售价249英镑 我曾经花了 ...

  8. Spark RPC框架源码分析(二)RPC运行时序

    前情提要: Spark RPC框架源码分析(一)简述 一. Spark RPC概述 上一篇我们已经说明了Spark RPC框架的一个简单例子,Spark RPC相关的两个编程模型,Actor模型和Re ...

  9. Spark RPC框架源码分析(三)Spark心跳机制分析

    一.Spark心跳概述 前面两节中介绍了Spark RPC的基本知识,以及深入剖析了Spark RPC中一些源码的实现流程. 具体可以看这里: Spark RPC框架源码分析(二)运行时序 Spark ...

随机推荐

  1. WPF动画制作简单的按钮动画

    主界面的代码 <StackPanel ButtonBase.Click="Grid_Click"> <Button Content="逐渐变大缩小&qu ...

  2. HTML5游戏探讨,怎样让微信游戏仅仅能执行在微信中

    大致文件布局例如以下.一个html文件.一个loading.js,在loading.js中载入其它须要的js和css. 至于详细的速度的话.建议cdn或者一个域中最多载入6个js文件.在loading ...

  3. CentOS 5 全功能WWW服务器搭建全教程 V3.0

    http://hx100.blog.51cto.com/44326/339949/ 一.基本系统安装1.下载CentOS 5我是下载的DVD版本,大家也可以下载服务器CD安装版本,其实都差不多.大家可 ...

  4. MyTools

    using UnityEditor; using UnityEngine; using System.IO; using System.Collections; using System.Collec ...

  5. Jmeter变量参数化及函数应用

    分类: 测试工具 2006-12-14 10:54 12041人阅读 评论(5) 收藏 举报 javascriptloadrunnerrandom脚本测试多线程 我们在使用Jmeter录制脚本后,经常 ...

  6. iOS开发-在Swift里使用AFNetworking方法

    在OC里使用惯了AFNetworking,比较喜欢这一个第三方库,在别的途径里得知可以在Swift里使用AFNetworking.但是那个时候我不知道具体的操作是怎样的,于是我只能去百度.GOOGLE ...

  7. Bootstrap-初步学习

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="utf-8&quo ...

  8. 用Jmeter测试RabbitMQ

    1.下载AMQP插件 github上面有源码,可以通过ant+ivy在本地进行打包(下载IDEA实践成功) https://github.com/jlavallee/JMeter-Rabbit-AMQ ...

  9. 利用python批量缩放图片

    废话少说,上代码: import matplotlib as mpl mpl.use('Agg') import os import matplotlib.pyplot as plt from sci ...

  10. Redis之ziplist数据结构

    0.前言 redis初始创建hash表,有序集合,链表时, 存储结构采用一种ziplist的存储结构, 这种结构内存排列更紧密, 能提高访存性能. 本文介绍ziplist数据结构 1.ziplist存 ...