Ejemplo n.º 1
0
 /**
  * 初始化Redis配置数据和前缓存结构
  */
 private static function init()
 {
     $config = Config::getEnv("database.redis");
     if (empty($config)) {
         throw new \InvalidArgumentException("配置项'database.redis'不能为空");
     }
     $config = (array) $config;
     $db_conn_name_list = \Qp\Kernel\Database\QpDB::getConnectionNameList();
     foreach ($config as $name => $data) {
         $name = strval($name);
         if (in_array($name, $db_conn_name_list)) {
             throw new \InvalidArgumentException("配置项'database.redis'的连接名'{$name}'和其他类型的数据库连接名冲突");
         }
         $data = (array) $data;
         if (empty($data)) {
             throw new \InvalidArgumentException("配置项'database.redis.{$name}'必须为非空数组");
         }
         $conn_name = $name;
         self::handleConfigArr($data, 'host', $host);
         self::handleConfigArr($data, 'auth', $auth);
         self::handleConfigArr($data, 'database', $database);
         self::handleConfigArr($data, 'port', $port);
         self::handleConfigArr($data, 'prefix', $prefix);
         $prefix = strval($prefix);
         if ($prefix == "") {
             $data['prefix'] = ":";
         } else {
             $data['prefix'] = "_" . $prefix . ":";
         }
         self::$config_list[$conn_name] = new ConfigObj($conn_name, $host, $auth, $database, $port, $data['prefix'], $data);
     }
     if (self::$frontCache === null) {
         self::$frontCache = new \Phalcon\Cache\Frontend\Data(self::$frontCacheData);
     }
 }
Ejemplo n.º 2
0
 /**
  * 判断传入的日志等级是否可以记录
  * 允许记录返回true,否则返回false
  *
  * @param   string  $log_level  日志等级
  * @return  bool
  */
 public static function isLog($log_level)
 {
     if (self::$log_mode === null) {
         $log_mode_config = Config::getEnv("app.log_mode");
         if ($log_mode_config < 0 || $log_mode_config > 8) {
             throw new \InvalidArgumentException("日志模式必须是0到8之间的整数,请检查配置项:app.log_mode");
         }
         self::$log_mode = $log_mode_config;
     }
     if (self::$log_mode <= array_search($log_level, self::$log_level_allow)) {
         return true;
     }
     return false;
 }
Ejemplo n.º 3
0
 /**
  * 记录起始请求日志
  * 记录成功返回true,失败或没记录日志返回false
  *
  * @param  \Exception|\Throwable   $ex
  * @return  bool
  */
 public static function error_log($ex)
 {
     if (!BaseLog::isLog('error')) {
         return false;
     }
     if (!Config::getEnv("app.framework_error_log")) {
         return false;
     }
     $data = Request::nonPostParam();
     if (Config::getEnv("app.request_log_post")) {
         $data = Request::param();
     }
     $log_msg = "\r\nQP->Main最外层捕捉到Exception异常:\r\n请求参数:{Param}\r\n异常信息:{E_Msg}\r\n异常位置:{E_Point}\r\n更多异常队列信息:{E_Trace}\r\n";
     $log_data = ['Param' => json_encode($data), 'E_Msg' => $ex->getMessage(), 'E_Point' => $ex->getFile() . ":" . $ex->getLine(), 'E_Trace' => json_encode($ex->getTrace())];
     return Log::error($log_msg, $log_data, true, 'framework');
 }
Ejemplo n.º 4
0
 /**
  * 返回默认的数据库链接对象
  *
  * @return  ConnectionObj
  */
 public function getDefaultConnection()
 {
     $config = Config::getEnv('database.default');
     if (empty($config)) {
         throw new \InvalidArgumentException("'database'配置文件中的'default'配置项无效:该配置必须是非空数组");
     }
     $driver_str = isset($config->driver) ? $config->driver : null;
     $driver = strtolower($driver_str);
     unset($config->driver);
     $config = (array) $config;
     $config['options'] = [\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION, \PDO::ATTR_EMULATE_PREPARES => false, \PDO::ATTR_STRINGIFY_FETCHES => false, \PDO::ATTR_DEFAULT_FETCH_MODE => $this->getDefaultFetch()];
     return new ConnectionObj('db', $driver, $config);
 }
Ejemplo n.º 5
0
 /**
  * 注册命名空间:除了app目录外,还需要注册用户定义的命名空间
  */
 private function setNamespace()
 {
     // 注册app目录,使其成为prs-4标准注册命名空间
     $loader = new \Phalcon\Loader();
     $loader->registerDirs(array(QP_APP_PATH));
     // 注册用户自定义命名空间
     $ns_config = (array) Config::get('app.namespace');
     $ns = ['App' => QP_APP_PATH];
     foreach ($ns_config as $key => $value) {
         if ($key == "App") {
             continue;
         }
         $ns[$key] = QP_ROOT_PATH . $value;
     }
     $loader->registerNamespaces($ns)->register();
 }
Ejemplo n.º 6
0
 /**
  * QP框架异常处理方式
  *
  * @param   \Exception|\Throwable   $ex
  */
 public function fatalHandler($ex)
 {
     if (Config::getEnv("app.debug")) {
         echo "<pre>";
         echo "Exception : ", $ex->getMessage(), "<br>";
         echo "Catch position : " . $ex->getFile() . " : " . $ex->getLine() . "<br><br>";
         echo $ex->getTraceAsString();
     } else {
         echo strval(Config::getEnv("app.prod_tip"));
     }
     exit;
 }