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. 解决 The &#39;InnoDB&#39; feature is disabled; you need MySQL built with &#39;InnoDB&#39; to have it working

    事由: 迁移server的时候须要操作数据库.将数据库也进行迁移,在新server中导入数据的时候提示 The 'InnoDB' feature is disabled; you need MySQL ...

  2. 小程序app is not defined

    错误记录: 小程序丨 报错:app is not defined; 解决方案: Js头部添加:var app = getApp();     返回按钮: wx.navigateBack();   转发 ...

  3. react 的死循环

    在 componentWillUpdate 中 通过 this.setState 修改状态值,可能会导致死循环,因为会调用 shouldComponentUpdate 可以通过 nextProp.pr ...

  4. Visual studio C++ MFC之Menu editor

    背景 本篇旨在MSDN帮助文档下总结Menu editor的使用,并列出碰到的具体问题. 正文 创建Menu Editor 打开链接MSDN之Creating a Menu.按照文档的方法创建Menu ...

  5. oracle常用函数使用大全 Oracle除法(转)

    http://blog.csdn.net/chenmeng2192089/article/details/9155625 一.运算符算术运算符:+ - * / 可以在select 语句中使用连接运算符 ...

  6. linux小技巧(1)

    1.避免文件夹拼写错误 shopt命令: 演示一下: 我想进入/home文件夹可是不小心拼写错了: [fulinux@ubuntu ~]$ cd /hoem-bash: cd: /hoem: No s ...

  7. Java 创建用户异常类、将异常一直向上抛、 throw和throws的区别

    如果java提供的系统异常类型不能满足程序设计的需求,那么可以设计自己的异常类型. 从java异常类的结构层次可以看出,java类型的公共父类为Throwable.在程序运行中可能出现俩种问题:一种是 ...

  8. php文件加载路径

    <?php require('reusable.php'); echo "相对路径加载<br/>"; /* ./ 表示当前文件所在的目录 ../ 表示当前文件所在 ...

  9. McCabe环路复杂度计算方法

    环路复杂度用来定量度量程序的逻辑复杂度.以McCabe方法来表示. 在程序控制流程图中,节点是程序中代码的最小单元,边代表节点间的程序流.一个有e条边和n个节点的流程图F,可以用下述3种方法中的任何一 ...

  10. sqlserver利用链接服务器查询或同步本地数据库和远程数据库

    这个实际上是SQLserver的分布式查询:如果一个项目需要二至多台服务器,而我们又必须从几台服务器中将数据取出来,这就必须用分布式查询!在这里有两个概念:本地数据源.远程数据源!本地数据源指的是单个 ...