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. iOS 系统框架

    iOS的系统架构分为四个层次:核心操作系统层(Core OS layer).核心服务层(Core Services layer).媒体层(Media layer)和可触摸层(Cocoa Touch l ...

  2. There is insufficient memory for the Java Runtime Environment to continue问题解决

    在linux系统下长时间进行性能測试,连续几次发生server假死无法连接上的情况,无奈仅仅能重新启动server.在測试路径下发现hs_err_pid17285.log文件,打开文件查看其主要内容例 ...

  3. 在对方电脑建立IPC连接, 利用IPC$入侵 运行木马

    第一大步:  IPC漏洞的建立 1)在目标主机上设置组策略:開始->执行-〉gpedit.msc 2)计算机配置->windows配置-〉本地策略-〉安全选项 3)在安全选项中, 将网络訪 ...

  4. VMware中Nat方式设置静态IP

    一.共享无线连接或本地连接,给VMnet8. 在网络配置中.选着无线连接,右键属性.共享. 这里默认给虚拟网卡VMnet8.分配了IP:192.168.137.1. 二,在VMware中配置VMnet ...

  5. C语言-字符串操作函数

    gets(char buffer[]) 从标准输入读取一行, 并去掉换行符, 在字符串末尾增加 '\0' 字符, 写入到缓冲区 成功则返回 buffer 的地址, 出错或者遇到文件结尾则返回空指针, ...

  6. spring启动加载过程源码分析

    我们知道启动spring容器两常见的两种方式(其实都是加载spring容器的xml配置文件时启动的): 1.在应用程序下加载 ApplicationContext ctx = new ClassPat ...

  7. centos7下安装openvpn,访问内网服务器 (二) windows访问

    一.简介 在上一章中已经安装好了openvpn,并且已经启动成功,现在就可以通过openvpn的客户端进行连接访问内网服务器了. 二.安装openvpn客户端 下载地址: https://www.te ...

  8. 利用python拼接图片

    问题描述: 将16张图片拼接成4x4的图片, 且不改变每单张图片的像素值. 代码如下: import os from PIL import Image path = '/share1/home/con ...

  9. 李洪强漫谈iOS开发[C语言-002]-开发概述程序的本质与简单执行过程

    李洪强iOS开发之应用程序的本质与简单执行过程 什么叫程序? 就是一段执行指令 程序的两个状态: 保存状态(保存到硬盘上)   运行状态(由CPU执行) 代码可以执行吗? CPU(中央处理器-> ...

  10. MyEclipse 2013安装后要做的几件事

    一.Myeclipse 2013修改字体 MyEclipse 2013是基于Eclipse3.7内核,但在Eclipse的Preferences-〉general-〉 Appearance->C ...