前台入口index.php
加载base.php
此时是定义了系统参数,如下
//PHPCMS框架路径 define('PC_PATH', dirname(__FILE__).DIRECTORY_SEPARATOR); if(!defined('PHPCMS_PATH')) define('PHPCMS_PATH', PC_PATH.'..'.DIRECTORY_SEPARATOR); //缓存文件夹地址 define('CACHE_PATH', PHPCMS_PATH.'caches'.DIRECTORY_SEPARATOR); //主机协议 define('SITE_PROTOCOL', isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == '443' ? 'https://' : 'http://'); //当前访问的主机名 define('SITE_URL', (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : '')); //来源 define('HTTP_REFERER', isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : ''); //系统开始时间 define('SYS_START_TIME', microtime()); //加载公用函数库 pc_base::load_sys_func('global'); pc_base::load_sys_func('extention'); pc_base::auto_load_func(); pc_base::load_config('system','errorlog') ? set_error_handler('my_error_handler') : error_reporting(E_ERROR | E_WARNING | E_PARSE); //设置本地时差 function_exists('date_default_timezone_set') && date_default_timezone_set(pc_base::load_config('system','timezone')); define('CHARSET' ,pc_base::load_config('system','charset')); //输出页面字符集 header('Content-type: text/html; charset='.CHARSET); define('SYS_TIME', time()); //定义网站根路径 define('WEB_PATH',pc_base::load_config('system','web_path')); //js 路径 define('JS_PATH',pc_base::load_config('system','js_path')); //css 路径 define('CSS_PATH',pc_base::load_config('system','css_path')); //img 路径 define('IMG_PATH',pc_base::load_config('system','img_path')); //动态程序路径 define('APP_PATH',pc_base::load_config('system','app_path')); //应用静态文件路径 define('PLUGIN_STATICS_PATH',WEB_PATH.'statics/plugin/'); if(pc_base::load_config('system','gzip') && function_exists('ob_gzhandler')) { ob_start('ob_gzhandler'); } else { ob_start(); }
接下来是调用pc_base::create_app()
pc_base::create_app() -->pc_base::load_sys_class('application')-->pc_base::_load_class('application',$path|'/libs/classes/')
上面这一条路径是base.php中函数调用,就为了一个目的,加载application.class.php类
下面看一下application.class.php中做了些什么
首先,看一下构造函数
/** * 构造函数 */ public function __construct() { $param = pc_base::load_sys_class('param'); define('ROUTE_M', $param->route_m()); define('ROUTE_C', $param->route_c()); define('ROUTE_A', $param->route_a()); $this->init(); }
这里,首先加载了param.class.php 参数配置类,对路由、$GET $POST $REQUEST $COOKIE等一些全局变量进行了初始化配置。
然后是调用了application类内部init()函数,调用事件。
/** * 调用事件 */ private function init() { $controller = $this->load_controller(); if (method_exists($controller, ROUTE_A)) { if (preg_match('/^[_]/i', ROUTE_A)) { exit('You are visiting the action is to protect the private action'); } else { call_user_func(array($controller, ROUTE_A)); } } else { exit('Action does not exist.'); } }
init() 调用了 加载控制器方法,这里将控制器模版文件包含进来。
/** * 加载控制器 * @param string $filename * @param string $m * @return obj */ private function load_controller($filename = '', $m = '') { if (empty($filename)) $filename = ROUTE_C; if (empty($m)) $m = ROUTE_M; $filepath = PC_PATH.'modules'.DIRECTORY_SEPARATOR.$m.DIRECTORY_SEPARATOR.$filename.'.php'; if (file_exists($filepath)) { $classname = $filename; include $filepath; if ($mypath = pc_base::my_path($filepath)) { $classname = 'MY_'.$filename; include $mypath; } if(class_exists($classname)){ return new $classname; }else{ exit('Controller does not exist.'); } } else { exit('Controller does not exist.'); } }