/**
  * 构造函数
  *
  * @access public
  *
  * @param array $params 数据库连接参数,如主机名,数据库用户名,密码等
  *
  * @return boolean
  */
 public function __construct($options = null)
 {
     if (!extension_loaded('redis')) {
         Controller::halt('The redis extension to be loaded!');
     }
     //当参数为空时,程序则自动加载配置文件中数据库连接参数
     if (!$options || !is_array($options)) {
         $options = Configure::get('redis');
         if (!$options) {
             $options = array();
         }
     }
     $options += $this->_defaultOptions;
     //连接数据库
     $this->_Redis = new Redis();
     $connect = !$options['persistent'] ? 'connect' : 'pconnect';
     $return = $this->_Redis->{$connect}($options['host'], $options['port'], $options['expire']);
     if ($return && $options['password']) {
         $return = $this->_Redis->auth($options['password']);
     }
     if ($return && $options['database']) {
         $return = $this->_Redis->select($options['database']);
     }
     return $return;
 }
 /**
  * 构造函数
  *
  * @access public
  * @return boolean
  */
 public function __construct()
 {
     $options = Configure::get('cookie');
     $this->_options = $options && is_array($options) ? $options : array();
     $this->_options += $this->_defaultOptions;
     return true;
 }
 /**
  * 加载自定义配置文件所引导的文件
  *
  * @access private
  *
  * @param string $className 所需要加载的类的名称,注:不含后缀名
  *
  * @return void
  */
 private static function _loadImportConfigFile($className)
 {
     //定义自动加载状态。(true:已加载/false:未加载)
     $atuoLoadStatus = false;
     //分析配置文件import引导信息
     $importRules = Configure::get('import');
     //当配置文件引导信息合法时
     if ($importRules && is_array($importRules)) {
         foreach ($importRules as $rules) {
             if (!$rules) {
                 continue;
             }
             //当配置文件引导信息中含有*'时,将设置的规则中的*替换为所要加载的文件类名
             if (strpos($rules, '*') !== false) {
                 $filePath = str_replace('*', $className, $rules);
             } else {
                 $filePath = $rules . DS . str_replace('_', DS, $className) . '.php';
             }
             //当自定义自动加载的文件存在时
             if (is_file($filePath)) {
                 //加载文件
                 Doit::loadFile($filePath);
                 $atuoLoadStatus = true;
                 break;
             }
         }
     }
     return $atuoLoadStatus;
 }
 /**
  * 构造方法
  *
  * 用于初始化运行环境,或对基本变量进行赋值
  *
  * @access public
  *
  * @param array $params 数据库连接参数,如主机名,数据库用户名,密码等
  *
  * @return boolean
  */
 public function __construct($params = array())
 {
     if (!extension_loaded('mongo')) {
         Controller::halt('The mongo extension to be loaded!');
     }
     //参数分析
     if (!$params || !is_array($params)) {
         //加载数据库配置文件.
         $params = Configure::get('mongo');
     }
     $params = is_array($params) ? $params + $this->_defaultConfig : $this->_defaultConfig;
     if (!isset($params['dbname']) || !$params['dbname']) {
         Controller::halt('The file of MongoDB config is error, dbname is not found!');
     }
     try {
         //实例化mongo
         $this->_mongo = new Mongo($params['dsn'], $params['option']);
         //连接mongo数据库
         $this->_dbLink = $this->_mongo->selectDB($params['dbname']);
         //用户登录
         if (isset($params['username']) && isset($params['password'])) {
             $this->_dbLink->authenticate($params['username'], $params['password']);
         }
         return true;
     } catch (Exception $exception) {
         //抛出异常信息
         throw new DoitException('MongoDb connect error!<br/>' . $exception->getMessage(), $exception->getCode());
     }
 }
 /**
  * 设置session最大存活时间.
  *
  * @access protected
  * @return boolean
  */
 protected static function _setTimeout()
 {
     //获取session的系统配置信息
     $configExpire = Configure::get('session.expire');
     if (!$configExpire) {
         return false;
     }
     return ini_set('session.gc_maxlifetime', $configExpire);
 }
 /**
  * 静态加载项目设置目录(config目录)中的配置文件
  *
  * 加载项目设置目录(config)中的配置文件,当第一次加载后,第二次加载时则不再重新加载文件。返回结果为配置文件内容,默认为数据格式为数组
  *
  * @access public
  *
  * @param string $configName 所要加载的配置文件名 注:不含后缀名
  *
  * @return array
  */
 public static function getConfig($configName)
 {
     return Configure::getConfig($configName);
 }
 /**
  * 获取当前日志文件名
  *
  * @example
  *
  * $this->_getLogFilePath('sql');
  * 或
  * $this->_getLogFilePath('2014-11.2014-11-23');
  * 或
  * $this->_getLogFilePath('2014-11/2014-11-23');
  *
  * @access private
  *
  * @param $logFileName 日志文件名
  *
  * @return string
  */
 private static function _getLogFilePath($logFileName = null)
 {
     //参数分析
     if ($logFileName && strpos($logFileName, '.') !== false) {
         $logFileName = str_replace('.', '/', $logFileName);
     }
     //组装日志文件路径
     $logFilePath = rtrim(Configure::get('application.logPath'), '/');
     if (!$logFileName) {
         $logFilePath .= DS . date('Y-m') . '/' . date('Y-m-d');
     } else {
         if (strpos($logFileName, '/') !== false) {
             $logFilePath .= DS . $logFileName;
         } else {
             $logFilePath .= DS . date('Y-m') . '/' . $logFileName;
         }
     }
     $logFilePath .= '.log';
     return $logFilePath;
 }
 /**
  * 构造方法
  *
  * @access public
  *
  * @param array $params 数据库连接参数,如主机名,数据库用户名,密码等
  *
  * @return boolean
  */
 public function __construct($options = null)
 {
     //分析memcached扩展模块的加载
     if (!extension_loaded('memcached')) {
         Controller::halt('The memcached extension to be loaded before use!');
     }
     //获取Memcache服务器连接参数
     if (!$options || !is_array($options)) {
         $options = Configure::get('memcached');
     }
     if (is_array($options) && $options) {
         $this->_defaultOptions = $options + $this->_defaultOptions;
     }
     if (!$this->_defaultOptions['servers']) {
         $this->_defaultOptions['servers'][] = $this->_defaultServer;
     }
     $this->_Memcached = new Memcached();
     foreach ($this->_defaultOptions['servers'] as $server) {
         $server += array('host' => '127.0.0.1', 'port' => 11211, 'persistent' => true);
         $this->_Memcached->addServer($server['host'], $server['port'], $this->_defaultOptions['persistent']);
     }
     return true;
 }
 /**
  * 初始化常用的全局常量
  *
  * 定义常用的全局常量:重写模式、路由分割符、伪静态网址的后缀、基本网址
  *
  * @access private
  *
  * @param string $filePath 配置文件的路径
  *
  * @return boolean
  */
 private static function _init($filePath = null)
 {
     //加载对配置文件管理的类文件
     self::loadFile(DOIT_ROOT . '/core/Configure.php');
     //加载路由网址分析的类文件
     self::loadFile(DOIT_ROOT . '/core/Router.php');
     //加载Controller基类
     self::loadFile(DOIT_ROOT . '/core/Controller.php');
     //加载并分析项目的主配置文件
     Configure::loadConfig($filePath);
     //定义是否开启调试模式。开启后,程序运行出现错误时,显示错误信息,便于程序调试。
     if (!defined('DOIT_DEBUG')) {
         define('DOIT_DEBUG', Configure::get('application.debug'));
     }
     //定义URL的Rewrite功能是否开启。如开启后,需WEB服务器软件如:apache或nginx等,要开启Rewrite功能。
     if (!defined('DOIT_REWRITE')) {
         define('DOIT_REWRITE', Configure::get('application.rewrite'));
     }
     //定义项目应用目录(application)的基本路径
     if (!defined('BASE_PATH')) {
         define('BASE_PATH', rtrim(Configure::get('application.basePath'), '/'));
     }
     //定义项目缓存目录(cache)的基本路径
     if (!defined('CACHE_PATH')) {
         define('CACHE_PATH', rtrim(Configure::get('application.cachePath'), '/'));
     }
     //定义项目入口文件的名称
     if (!defined('ENTRY_SCRIPT_NAME')) {
         define('ENTRY_SCRIPT_NAME', basename($_SERVER['SCRIPT_NAME']));
     }
     //定义网址路由的分割符。注:分割符不要与其它网址参数等数据相冲突
     if (!defined('URL_SEGEMENTATION')) {
         define('URL_SEGEMENTATION', Configure::get('application.urlSegmentation'));
     }
     //定义路由网址的格式。注:get/path
     if (!defined('URL_FORMAT')) {
         define('URL_FORMAT', Configure::get('application.urlFormat'));
     }
     //定义视图文件格式
     if (!defined('VIEW_EXT')) {
         define('VIEW_EXT', Configure::get('application.viewExt'));
     }
     //定义默认的Controller名称。注:为提高不同系统平台的兼容性,名称首字母要大写,其余小写
     if (!defined('DEFAULT_CONTROLLER')) {
         define('DEFAULT_CONTROLLER', Configure::get('application.defaultController'));
     }
     //定义默认的Action名称。注:名称要全部使用小写字母
     if (!defined('DEFAULT_ACTION')) {
         define('DEFAULT_ACTION', Configure::get('application.defaultAction'));
     }
     return true;
 }