CodeIgniter源码分析之index.php

Stella981
• 阅读 422
<?php

/*
*---------------------------------------------------------------
* APPLICATION ENVIRONMENT
*---------------------------------------------------------------
*
*
* //配置项目运行的环境,该配置会影响错误报告的显示和配置文件的读取。
*/
define('ENVIRONMENT', 'development');
/*
*---------------------------------------------------------------
* ERROR REPORTING
*---------------------------------------------------------------
*
*/

if (defined('ENVIRONMENT'))
{
switch (ENVIRONMENT)
{
case 'development':
error_reporting(E_ALL);
break;

case 'testing':
case 'production':
error_reporting(0);
break;

default:
exit('The application environment is not set correctly.');
}
}

/*
*---------------------------------------------------------------
* SYSTEM FOLDER NAME
*---------------------------------------------------------------
*
*
* 设置系统目录
*/
$system_path = 'system';

/*
*---------------------------------------------------------------
* APPLICATION FOLDER NAME
*---------------------------------------------------------------
*
*
* 设置应用目录
*/
$application_folder = 'application';

/*
* --------------------------------------------------------------------
* DEFAULT CONTROLLER
* --------------------------------------------------------------------
*
*
*/

//下面这个地方设置的$routing会对路由有重定向的作用。详见:core/CodeIginter.php
// $routing['directory'] = '';

// $routing['controller'] = '';

// $routing['function'] = '';

/*
* -------------------------------------------------------------------
* CUSTOM CONFIG VALUES
* ------------------------------------------------------------------
* 下面这里提供一个定义配置信息的地方。其实在index.php里面很多地方都可以设置一些配置,像刚才上面的$routing,

* 而在这里设置的配置信息要优先于在config/目录下设置的配置信息。
*/
// $assign_to_config['name_of_config_item'] = 'value of config item';

// --------------------------------------------------------------------
// END OF USER CONFIGURABLE SETTINGS. DO NOT EDIT BELOW THIS LINE
// --------------------------------------------------------------------

/*
* ---------------------------------------------------------------
* Resolve the system path for increased reliability
* ---------------------------------------------------------------
*/

//这个请参考:http://blog.163.com/wu_guoqing/blog/static/196537018201272512616394/
if (defined('STDIN'))
{
chdir(dirname(__FILE__));
}

//计算出$system_path,即核心文件所在的路径。realpath($path)中的$path必须为存在的路径。
if (realpath($system_path) !== FALSE)
{
$system_path = realpath($system_path).'/';
}

// 确保以/结尾
$system_path = rtrim($system_path, '/').'/';

// 判断是否为正确的目录
if ( ! is_dir($system_path))
{
exit("Your system folder path does not appear to be set correctly. Please open the following file and correct this: ".pathinfo(__FILE__, PATHINFO_BASENAME));
}

/*
* -------------------------------------------------------------------
* 在上面配置好一些文件目录信息后,根据这些目录来定义好一些常量。
* -------------------------------------------------------------------
*/
// 这个入口文件的文件名,目前是index.php
define('SELF', pathinfo(__FILE__, PATHINFO_BASENAME));

// 文件扩展名
define('EXT', '.php');

// 统一以/为目录分隔符(windows下是/或\,linux下默认是/)
define('BASEPATH', str_replace("\\", "/", $system_path));

// 前端控制器所在的目录。在CI里面就是这个入口文件。
define('FCPATH', str_replace(SELF, '', __FILE__));

// 取得核心文件的目录名,具体做法如下:
//trim(BASHPATH,'/'):先把BASHPATH给修剪一下,去掉首尾的‘/’
//先后通过strrchr(xxx,'/'):把上述得出来的字符串,截取出以最后一个'/'开头到结尾的一个子字符串。
//最后再trim(xxx,'/'),去掉两端的‘/’,实质这里是去掉左边的'/'。
define('SYSDIR', trim(strrchr(trim(BASEPATH, '/'), '/'), '/'));

// 定义应用文件目录

//先看看这个被你配置的目录是不是相对于当前文件,如果是的话,就可以成功定义。
if (is_dir($application_folder))
{
define('APPPATH', $application_folder.'/');
}
else
{
//如果不是,则再判断相对于核心文件目录是否存在这个应用目录。如果没有就拉倒了。。
if ( ! is_dir(BASEPATH.$application_folder.'/'))
{
exit("Your application folder path does not appear to be set correctly. Please open the following file and correct this: ".SELF);
}

define('APPPATH', BASEPATH.$application_folder.'/');
}

/*
* --------------------------------------------------------------------
* LOAD THE BOOTSTRAP FILE
* --------------------------------------------------------------------
*
*/

//实质上,这个前端控制器兼入口文件仅仅是定义当前项目运行的环境和一些常量,而真正起宏观控制作用的是下面这个CodeIgniter.php。
require_once BASEPATH.'core/CodeIgniter.php';

/**
* 总结一下这个文件做了一些什么:
* 第一,先设置好当前项目的运行环境,这里主要是错误报告方面的设置,这个放在了整个项目运行的第一位。
* 第二,再配置好一些目录信息,这些都是一定开发人员可以自定义的东西。然后根据配置目录信息,CI会把一些以后会有用的东西定义为常量
* ,为什么要这样做呢?因为以后会在很多不同地方,例如CI里面的各个组件都会用到路径相关的信息,在这里统一计算并定义,以后方
* 便引用和修改。
* 第三,引入CodeIgniter.php进行工作。
*
* 移步至核心文件目录下的core/CodeIgniter.php: http://calixwu.com/2014/11/codeigniter-yuanmafenxi-codeigniter-php.html
*/
点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
2年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
Java获得今日零时零分零秒的时间(Date型)
publicDatezeroTime()throwsParseException{    DatetimenewDate();    SimpleDateFormatsimpnewSimpleDateFormat("yyyyMMdd00:00:00");    SimpleDateFormatsimp2newS
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这