(一)CodeIgniter源码分析之index.php

<?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://blog.163.com/wu_guoqing/blog/static/196537018201281672320862/

时间: 2024-12-14 19:36:29

(一)CodeIgniter源码分析之index.php的相关文章

CodeIgniter源码分析之index.php

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

CodeIgniter源码分析(二) 入口文件index.php

1 <?php 2 3 /* 设定环境 */ 4 define('ENVIRONMENT', 'development'); 5 6 if (defined('ENVIRONMENT')) 7 { 8 switch (ENVIRONMENT) 9 { 10 case 'development': 11 error_reporting(E_ALL); 12 break; 13 14 case 'testing': 15 case 'production': 16 error_reporting(0

八)CodeIgniter源码分析之Config.php

1 <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); 2 3 // ------------------------------------------------------------------------ 4 5 /** 6 * CodeIgniter Config Class 7 */ 8 class CI_Config { 9 10 /** 11 * List of all loade

三)CodeIgniter源码分析之Common.php

1 <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); 2 3 // ------------------------------------------------------------------------ 4 5 /** 6 * Common Functions 7 */ 8 9 /** 10 * 为什么还要定义这些全局函数呢?比如说,下面有很多函数,如get_config().confi

二)CodeIgniter源码分析之CodeIgniter.php

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); /** * 上面: * 这个BASEPATH,就是在入口文件(index.php)里面定义的那个BASEPATH- * 如果没有定义BASEPATH,那么直接退出,下面程序都不执行.其实除了入口文件index.php开头没有这句话之外,所有文件都会有这句话 * 也就是说,所有文件都不能单独运行,一定是index.php在运行过程中把这些文件通 *

CodeIgniter源码分析之URI.php

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); // ------------------------------------------------------------------------ /** * URI Class */ class CI_URI { /** * List of cached uri segments */ var $keyval = array(); /** *

十)CodeIgniter源码分析之Output.php

1 <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); 2 3 // ------------------------------------------------------------------------ 4 5 /** 6 * Output Class 7 * 8 * Output组件其实有很多有用的方法,不过一般情况下,你不会直接去用到它们. 9 * 这里主要以Output::_dis

七)CodeIgniter源码分析之Benchmark.php

1 <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); 2 // ------------------------------------------------------------------------ 3 4 /** 5 * CodeIgniter Benchmark Class 6 */ 7 class CI_Benchmark { 8 9 /** 10 * List of all be

九)CodeIgniter源码分析之Hook.php

1 <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); 2 // ------------------------------------------------------------------------ 3 4 /** 5 * CodeIgniter Hooks Class 6 */ 7 class CI_Hooks { 8 9 /** 10 * Determines wether hook