前言:本人是一名PHPer,入职互联网行业三个月,工作用到的框架是CodeIgniter(以下简称CI),打算折腾一下自己,开一个新坑同时也写下一点东西,希望各位看官轻喷。PHP--CI框架源码分析,版本2.1.4。
首先我们看下CI框架的目录:
user_guide
该目录相当于参考手册(ps:英文版),建议网速好并且想找中文资料的童鞋直接到中文官网查看中文手册,实际开发中我们就不需要这个目录了,直接删掉即可。
入口文件 index.php
CI框架的入口文件,一切都从这里开始。一般入口文件是用来定义各种常量的,包括根目录路径、系统文件路径等等,我们一步一步地来分析。
这是CI框架中第一行代码(忽略注释),表示定义环境常量,'development'表示开发环境,与PHP的错误报告等级相关,所有警告和错误都会显示;我们还可以定义其为'production'生产环境,关闭所有错误报告。我们接着看下面这段相关代码:
if(definded('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.');
}
}
看了上面这段代码我们会发现,我们可以自己定义各种ENVIRONMENT的值,设置相对应的错误等级报告,建议按照CI框架默认设置即可。然后是定义各种变量和常量,具体我们看下面的代码:
$system_path = 'system'; //对应根目录的system文件夹
$application_folder = 'application'; //对应根目录的application文件夹
// Set the current directory correctly for CLI requests
if (defined('STDIN')) //CLI命令行模式常量
{
chdir(dirname(__FILE__));
}
if (realpath($system_path) !== FALSE)
{
$system_path = realpath($system_path).'/'; //相对路径转换为绝对路径(注意最后的'/')
}
// ensure there's a trailing slash
$system_path = rtrim($system_path, '/').'/'; //确保路径名最右边为斜杠
// Is the system path correct? 确保路径是存在的
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));
}
// The name of THIS file
define('SELF', pathinfo(__FILE__, PATHINFO_BASENAME)); //index.php
// The PHP file extension
// this global constant is deprecated.
define('EXT', '.php');
// Path to the system folder
define('BASEPATH', str_replace("\\", "/", $system_path)); //system文件夹目录路径
// Path to the front controller (this file)
define('FCPATH', str_replace(SELF, '', __FILE__)); //网站根目录
// Name of the "system folder"
define('SYSDIR', trim(strrchr(trim(BASEPATH, '/'), '/'), '/')); //'system'文件夹的名称
// The path to the "application" folder
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.'/');
}
上面的CI框架默认的目录及常量定义,当然我们也可以改变目录结构(这在后面的文章会提到),相应的也要改对应的定义语句。最后index.php文件的语句是require_once BASEPATH.'core/CodeIgniter.php'
,引入system文件夹下的核心文件CodeIgniter.php,下一篇文章再来分析该文件。