CodeIgniter源码阅读笔记(1)——框架入口index.php

这里写图片描述
熟悉CI的朋友应该都记得这个应用程序流程图吧,当接收到一个http请求时,由index.php初始化运行CodeIgniter所需的资源,Routing检查请求确定如何处理,如果存在缓存就直接输出,若不存在缓存,对用户提交的数据进行安全检查,检查通过,加载对应控制器,控制器加载模型,类库等处理请求所需的资源,处理完成之后,将渲染的视图传给浏览器,如果有开启缓存,则将视图缓存。至此,整套流程就走完了。

那么index.php作为这套流程的入口,具体做了哪些事情?

1. 设置应用运行环境常量

//定义运行环境的全局常量,默认是开发环境,框架可以根据这个全局常量加载不同环境的文件和报错级别
define('ENVIRONMENT', isset($_SERVER['CI_ENV']) ? $_SERVER['CI_ENV'] : 'development');

2.设置报错级别

switch (ENVIRONMENT)
{
    //开发环境,打开错误提示,提示所有错误类型
    case 'development':
        error_reporting(-1);
        ini_set('display_errors', 1);
    break;

    //测试环境和生产环境,关闭错误提示
    case 'testing':
    case 'production':
        ini_set('display_errors', 0);
        if (version_compare(PHP_VERSION, '5.3', '>='))
        {
            error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT & ~E_USER_NOTICE & ~E_USER_DEPRECATED);
        }
        else
        {
            error_reporting(E_ALL & ~E_NOTICE & ~E_STRICT & ~E_USER_NOTICE);
        }
    break;
    //配置了不能识别的环境常量,错误代码503提示错误信息
    default:
        header('HTTP/1.1 503 Service Unavailable.', TRUE, 503);
        echo 'The application environment is not set correctly.';
        exit(1); // EXIT_ERROR
}

3.设置系统目录常量

//系统目录
$system_path = 'system';

   /*
    *将系统目录转化为绝对路径
    */
if (defined('STDIN'))
{
    chdir(dirname(__FILE__));
}

//如果$system_path已经是绝对路径,在路径最后加上目录分隔符'/'
if (($_temp = realpath($system_path)) !== FALSE)
{
    $system_path = $_temp.DIRECTORY_SEPARATOR;
}
else
{
    //根据$system_path变量,将其转化成绝对路径
    $system_path = strtr(
    rtrim($system_path, '/\\'),'/\\',
            DIRECTORY_SEPARATOR.DIRECTORY_SEPARATOR
         ).DIRECTORY_SEPARATOR;
}

//若转化后的绝对路径不是目录,错误代码503
if ( ! is_dir($system_path))
{
    header('HTTP/1.1 503 Service Unavailable.', TRUE, 503);
    echo 'Your system folder path does not appear to be set         correctly. Please open the following file and correct this: '  .pathinfo(__FILE__, PATHINFO_BASENAME);
    exit(3); // EXIT_CONFIG
}

//定义当前文件名称的全局常量(此处常量值为index.php)
define('SELF', pathinfo(__FILE__, PATHINFO_BASENAME));

//定义入口文件绝对路径全局常量(常量值为index.php绝对路径)
define('FCPATH', dirname(__FILE__).DIRECTORY_SEPARATOR);

//系统目录绝对路径全局常量
define('BASEPATH', $system_path);

//系统目录名称
define('SYSDIR', basename(BASEPATH));

4.设置应用目录常量

//应用目录名称
$application_folder = 'application';

//如果$application_folder是目录,且存在
if (is_dir($application_folder))
{

    //如果$application_folder已经是绝对路径,在路径最后加上目录分隔符'/'
    if (($_temp = realpath($application_folder)) !== FALSE)
    {
        $application_folder = $_temp;
    }
    else
    {
        //根据$application_folder变量,将其转化成绝对路径
        $application_folder = strtr(
        rtrim($application_folder, '/\\'),
                '/\\',DIRECTORY_SEPARATOR.DIRECTORY_SEPARATOR
             );
    }
}
elseif (is_dir(BASEPATH.$application_folder.DIRECTORY_SEPARATOR))
{
    $application_folder = BASEPATH.strtr(
    trim($application_folder, '/\\'),
            '/\\',DIRECTORY_SEPARATOR.DIRECTORY_SEPARATOR
        );
}
else
{
    //若无法转化成绝对路径,错误代码503
    header('HTTP/1.1 503 Service Unavailable.', TRUE, 503);
    echo 'Your application folder path does not appear to be set correctly. Please open the following file and correct this: '.SELF;
    exit(3); // EXIT_CONFIG
}

//应用目录绝对路径全局常量
define('APPPATH', $application_folder.DIRECTORY_SEPARATOR);

5.设置视图路径常量

//视图目录名称
$view_folder = '';

//如果$view_folder已设置、是目录,且存在
if ( ! isset($view_folder[0])&&    is_dir(APPPATH.'views'.DIRECTORY_SEPARATOR))
{
    $view_folder = APPPATH.'views';
}
elseif (is_dir($view_folder))
{
    //如果$view_folder已经是绝对路径,在路径最后加上目录分隔符'/'
    if (($_temp = realpath($view_folder)) !== FALSE)
    {
        $view_folder = $_temp;
    }
    //根据$view_folder变量,将其转化成绝对路径
    else
    {
        $view_folder = strtr(
        rtrim($view_folder, '/\\'),
                '/\\',DIRECTORY_SEPARATOR.DIRECTORY_SEPARATOR
             );
    }
}
elseif (is_dir(APPPATH.$view_folder.DIRECTORY_SEPARATOR))
{
    $view_folder = APPPATH.strtr(
    trim($view_folder, '/\\'),
            '/\\',DIRECTORY_SEPARATOR.DIRECTORY_SEPARATOR
        );
}
else
{
    header('HTTP/1.1 503 Service Unavailable.', TRUE, 503);
    echo 'Your view folder path does not appear to be set correctly. Please open the following file and correct this: '.SELF;
    exit(3); // EXIT_CONFIG
}

//视图文件目录绝对路径全局常量
define('VIEWPATH', $view_folder.DIRECTORY_SEPARATOR);

5.加载核心控制文件

/*
 *入口文件最后加载了CodeIgniter.php
 *CodeIgniter.php是ci框架的核心文件
 *至此index.php的工作就完成了
 */
require_once BASEPATH.'core/CodeIgniter.php';
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值