PHP框架CI 学习笔记<二>

来源:互联网 发布:魔兽世界网络延迟 编辑:程序博客网 时间:2024/06/07 04:08

下面开始分析CI 代码,做为一个工作时间还不长的PHPer,做这些整理只是为了自己学习和成长同时分享给需要的人,所以大神看到莫要耻笑。其实技术就应该分享,身在这样一个时代,如果每个人都只是学自己的,永远也走不到前面,只有分享,交流,相互促进大环境的进步和资源的开放,才能让我们有更好的学习资源,水涨船高,我们也会不断进步。

下面开始看CI 的代码,让我们从入口文件看起,其实只要搞清楚了这个文件,就已经会有很大的长进:

我只分析比较重要的代码行:

define('ENVIRONMENT', isset($_SERVER['CI_ENV']) ? $_SERVER['CI_ENV'] : 'development');

打开入口文件index.php第一个代码可执行代码行就是这句,很明显这句代码是检查环境设置,如果没设置就默认为开发环境,如果想配置生产环境就在前面把环境配置一下;比如:$_SESSION['CI_ENV'] = ‘production’;

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;


default:
header('HTTP/1.1 503 Service Unavailable.', TRUE, 503);
echo 'The application environment is not set correctly.';
exit(1); // EXIT_ERROR
}

这一段代码主要是根据不同的环境配置不同的报错级别,使用的是error_reporting函数,举个例子熟悉这个函数,英文不懂的人自己复制翻译吧:

<?php

// Turn off all error reporting
error_reporting(0);

// Report simple running errors
error_reporting(E_ERROR E_WARNING E_PARSE);

// Reporting E_NOTICE can be good too (to report uninitialized
// variables or catch variable name misspellings ...)
error_reporting(E_ERROR E_WARNING E_PARSE E_NOTICE);

// Report all errors except E_NOTICE
error_reporting(E_ALL & ~E_NOTICE);

// Report all PHP errors (see changelog)
error_reporting(E_ALL);

// Report all PHP errors
error_reporting(-1);

// Same as error_reporting(E_ALL);
ini_set('error_reporting'E_ALL);

?>



if (defined('STDIN'))
{
chdir(dirname(__FILE__));
}

这段代码是干嘛的呢?首先,STDINSTDOUTSTDERR是PHP以 CLI(Command Line Interface)模式运行而定义的三个常量,这三个常量类似于Shell的stdin,stdout,stdout,分别是PHP CLI模式下的标准输入标准输出标准错误流。也就是说,这三行代码是为了保证命令行模式下,CI框架可以正常运行。关于PHP CLI的更多细节可以参考:http://www.php-cli.com/

接下来是定义了一些路径的全局常量和对一些路径的处理和校验;

// The name of THIS file
define('SELF', pathinfo(__FILE__, PATHINFO_BASENAME));


// Path to the system directory
define('BASEPATH', $system_path);


// Path to the front controller (this file) directory
define('FCPATH', dirname(__FILE__).DIRECTORY_SEPARATOR);


// Name of the "system" directory
define('SYSDIR', basename(BASEPATH));


// The path to the "application" directory
if (is_dir($application_folder))
{
if (($_temp = realpath($application_folder)) !== FALSE)
{
$application_folder = $_temp;
}
else
{
$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
{
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);


// The path to the "views" directory
if ( ! isset($view_folder[0]) && is_dir(APPPATH.'views'.DIRECTORY_SEPARATOR))
{
$view_folder = APPPATH.'views';
}
elseif (is_dir($view_folder))
{
if (($_temp = realpath($view_folder)) !== FALSE)
{
$view_folder = $_temp;
}
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
}


require_once BASEPATH.'core/CodeIgniter.php';

最后一个就是包含核心文件,具体在这个文件里执行了什么下一篇开始详解!


0 0
原创粉丝点击