Example #1
0
 /**
  * 框架初始化函数
  *
  */
 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();
 }
Example #2
0
 /**
  * 构造函数
  *
  * 初始化应用程序
  */
 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'));
 }