/** * 框架初始化函数 * */ public function __construct() { /** * 记录程序开始执行的时间点 */ self::$startTime = microtime(true); /** * 检测PHP版本,必须高于5.3.0 */ if (version_compare(PHP_VERSION, '5.3.0', '<')) { exit('Axion Framework Requires PHP Version >= 5.3.0'); } /** * 定义自适应系统的目录分隔符 * linux:'/' windows:'\' */ define('DS', DIRECTORY_SEPARATOR); /** * 定义当前时间戳 */ define('TIME', time()); /** * 定义当前操作系统类型(估计没人会用除了这两种以外的系统吧) */ define('OS', DS == '\\' ? 'windows' : 'linux'); /** * 定义客户端浏览器版本 @todo需要重新定义完善的浏览器获取方法 */ $agent = isset($_SERVER['HTTP_USER_AGENT']) ? strtolower($_SERVER['HTTP_USER_AGENT']) : "shell"; switch ($agent) { case (bool) strpos($agent, 'msie 6'): $browser = 'msie6'; break; case (bool) strpos($agent, 'msie 7'): $browser = 'msie7'; break; case (bool) strpos($agent, 'msie 8'): $browser = 'msie8'; break; case (bool) strpos($agent, 'firefox'): $browser = 'firefox'; break; case (bool) strpos($agent, 'chrome'): $browser = 'chrome'; break; case (bool) strpos($agent, 'safari'): $browser = 'safari'; break; case (bool) strstr($agent, 'opera'): $browser = 'opera'; break; case "shell": $browser = 'cli'; break; default: $browser = 'unknow'; } define('BROWSER', $browser); /** * 获取客户端IP地址 */ /* @todo 需要修改完成细致的IP获取工作 */ $remoteIp = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : "127.0.0.1"; define('IP', $remoteIp); /** * 定义当前浏览器为FIREFOX时是否安装了FIREPHP扩展 */ $isFIREPHP = $browser == 'firefox' && strpos($agent, 'firephp') ? true : false; define('IS_FIREPHP', $isFIREPHP); /** * 判断是否可以使用共享内存 */ $isSHM = false; if (OS == 'linux') { /** 如果共享内存可写则使用内存作为临时目录存储空间 **/ if (is_writable('/dev/shm')) { $appTmpPath = '/dev/shm'; $isSHM = true; } else { $appTmpPath = '/tmp'; } } /** * 定义是否使用了共享内存 */ define('IS_SHM', $isSHM); /** * 定义框架当前是否运行于CLI模式下 */ define('IS_CLI', PHP_SAPI == 'cli' ? true : false); /** * 定义框架默认使用的临时目录路径 */ define('TEMP_PATH', OS == 'windows' ? getenv('TEMP') : $appTmpPath); /** * 定义当前AXION所在路径 */ if (!defined('AXION_PATH')) { define('AXION_PATH', realpath(dirname(__FILE__))); } /** * 定义当前应用程序所在目录 */ if (!defined('APPLICATION_PATH')) { $pwd = getcwd(); define('APPLICATION_PATH', $pwd); } /** * 定义AXION必要的常量 */ //框架目录常量 define('AXION_LIB_PATH', AXION_PATH . DS . 'lib'); //AXION框架代码库目录 /** * 设置框架includePath */ self::addIncludePath(AXION_LIB_PATH); /** * 加载AXION基础函数库 */ require AXION_PATH . DS . 'common/functions.php'; /** * 加载AXION基础宏定义库 */ require AXION_PATH . DS . 'common/defines.php'; /** * 加载AXION启动所必须的类 */ require AXION_PATH . DS . 'lib' . DS . 'axion' . DS . 'config.class.php'; require AXION_PATH . DS . 'lib' . DS . 'axion' . DS . 'application.class.php'; /** * 加载AXION框架默认配置文件 */ AXION_CONFIG::loadConfigFile(AXION_PATH . DS . 'common' . DS . 'config.xml'); /** * 加载框架缓存文件 */ self::_loadCachedClass(); }
/** * 构造函数 * * 初始化应用程序 */ public function __construct() { /** * 计算应用程序的唯一ID */ self::$uniqueId = md5(APPLICATION_PATH); /** * 定义应用程序程序所需的临时文件目录常量 */ define('DATA_CACHE_PATH', TEMP_PATH . DS . 'axion_' . self::$uniqueId . DS . 'datacache'); define('DB_CACHE_PATH', TEMP_PATH . DS . 'axion_' . self::$uniqueId . DS . 'dbcache'); define('CODE_CACHE_PATH', TEMP_PATH . DS . 'axion_' . self::$uniqueId . DS . 'codecache'); /** * 定义应用程序各个库路径常量 */ define('APP_LIB_PATH', APPLICATION_PATH . DS . 'lib'); define('APP_CONFIG_PATH', APPLICATION_PATH . DS . 'config'); define('APP_CONTROLLER_PATH', APP_LIB_PATH . DS . 'controller'); define('APP_MODEL_PATH', APP_LIB_PATH . DS . 'model'); define('APP_TEMPLATE_PATH', APP_LIB_PATH . DS . 'template'); /** * 加载应用程序配置文件 */ $userConfigFile = APP_CONFIG_PATH . DS . 'config.xml'; if (file_exists($userConfigFile)) { AXION_CONFIG::loadConfigFile($userConfigFile, 'axion', true); } /** * 设置应用程序自动加载目录 */ Axion::addIncludePath(APP_LIB_PATH); //应用程序程序库目录 Axion::addIncludePath(APP_CONTROLLER_PATH); //控制器目录 Axion::addIncludePath(APP_MODEL_PATH); //模型目录 /** * 注册默认错误处理函数 */ $debugLevel = AXION_CONFIG::GET('axion.debug.level'); switch ($debugLevel) { case 1: $level = E_ALL; /** * 确保无法被错误函数捕捉的错误可以打印 */ ini_set('display_errors', 1); break; case 0: $level = E_ERROR | E_PARSE; /** * 部署模式关闭错误信息 */ ini_set('display_errors', 0); break; } /** * 设置程序错误提示开关 */ error_reporting($level); set_error_handler(array($this, 'errorHandler'), $level); /** * 注册程序结束清理函数 */ register_shutdown_function(array($this, 'shutdownHandler')); /** * 注册默认异常处理函数 */ set_exception_handler(array($this, 'exceptionHandler')); /** * 创建应用程序所需的临时文件目录 */ $serverInitDone = true; if (!file_exists(APPLICATION_PATH . DS . 'serverInit.done')) { $tmpDirs = array('data_cache' => DATA_CACHE_PATH, 'db_cache' => DB_CACHE_PATH, 'view_cache' => VIEW_CACHE_PATH, 'code_cache' => CODE_CACHE_PATH); foreach ($tmpDirs as $v) { if (!is_dir($v)) { AXION_UTIL_FILE::mkdir($v, 0755); } } $serverInitDone = false; } define('IS_SERVER_INIT_DONE', $serverInitDone); /** * 开启SESSION支持 */ session_start(); //@todo 暂时开启默认SESSION支持,回头需要改为自定义版本 /** * 设置时区 */ date_default_timezone_set(AXION_CONFIG::get('axion.misc.timezone')); }