/**
  *
  * 控制器执行
  */
 public function runCommand()
 {
     //请求方法和来源
     switch ($_SERVER['REQUEST_METHOD']) {
         case 'GET':
             break;
         case 'POST':
             if (BaseModelSwitch::check(BaseModelSwitch::SWITCH_POST_REFERER_CHECK) === true) {
                 $forbid = true;
                 if (!empty($_SERVER['HTTP_REFERER'])) {
                     $parseReferer = parse_url($_SERVER['HTTP_REFERER']);
                     if (!empty($parseReferer['host']) && preg_match("/^[\\w-\\.]+\$/", $parseReferer['host'])) {
                         foreach ($_SERVER['SERVER_ACCEPT_REFERER'] as $referer) {
                             if ($referer === $parseReferer['host'] || '.' . $referer === substr($parseReferer['host'], -(strlen($referer) + 1))) {
                                 $forbid = false;
                                 break;
                             }
                         }
                     }
                 }
                 if ($forbid) {
                     throw new BaseModelException('请求源不允许[' . (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '') . ']', 90100, 'controller_trace');
                 }
             }
             break;
         case 'HEAD':
             break;
         default:
             throw new BaseModelException('请求方法不允许', 90101, 'controller_trace');
     }
     $action = BaseModelCommon::getFormatName(self::$action);
     if (in_array($action, array('runCommand', 'setView', 'display', 'fetch'), true)) {
         $controllerName = BaseModelCommon::getFormatName(self::$controller, 'class');
         throw new BaseModelException($controllerName . 'Controller类中方法' . $action . '为基类方法不能使用,您现在指向的app-controller为:app/' . Configure::$app . '/controller/', 90102, 'controller_trace');
     }
     if (method_exists($this, $action)) {
         call_user_func_array(array(&$this, $action), array());
     } else {
         $controllerName = BaseModelCommon::getFormatName(self::$controller, 'class');
         throw new BaseModelException($controllerName . 'Controller类中不存在你调用的方法' . $action . ',您现在指向的app-controller为:app/' . Configure::$app . '/controller/', 90103, 'controller_trace');
     }
 }
Exemple #2
0
 /**
  * 连接数据库,返回连接上的PDO对象
  * @param int $DBName    数据库名称
  * @param string $master_or_slave   master;主库|slave:从库
  * @return master db handle;
  */
 public static function connectDB($DBName, $master_or_slave = 'slave', $DBConfig = array(), $reConnect = false)
 {
     $master_or_slave === 'master' || ($master_or_slave = 'slave');
     if ($master_or_slave === 'master' && !empty($_SERVER['HTTP_HOST']) && isset($_SERVER['REQUEST_METHOD']) && strtoupper($_SERVER['REQUEST_METHOD']) !== 'POST' && BaseModelSwitch::check(BaseModelSwitch::SWITCH_MASTERDB_POST_ONLY) === true) {
         throw new BaseModelDBException('请求方法不允许,主库操作必须为post', 90300);
     }
     $DBType = DAGGER_ENV;
     in_array($DBType, array('dev', 'test', 'product'), true) || ($DBType = 'product');
     empty($DBName) && ($DBName = DAGGER_DB_DEFAULT);
     if (empty(DBConfig::$config['mysql'][$DBName][$DBType]['master']['host'])) {
         $DBType = 'product';
     }
     $username = empty($DBConfig[$master_or_slave]['user']) ? DBConfig::$config['mysql'][$DBName][$DBType][$master_or_slave]['user'] : $DBConfig[$master_or_slave]['user'];
     $password = empty($DBConfig[$master_or_slave]['pass']) ? DBConfig::$config['mysql'][$DBName][$DBType][$master_or_slave]['pass'] : $DBConfig[$master_or_slave]['pass'];
     $hostspec = empty($DBConfig[$master_or_slave]['host']) ? DBConfig::$config['mysql'][$DBName][$DBType][$master_or_slave]['host'] : $DBConfig[$master_or_slave]['host'];
     $port = !isset($DBConfig[$master_or_slave]['port']) || !is_numeric($DBConfig[$master_or_slave]['port']) ? DBConfig::$config['mysql'][$DBName][$DBType][$master_or_slave]['port'] : $DBConfig[$master_or_slave]['port'];
     $database = empty($DBConfig[$master_or_slave]['database']) ? DBConfig::$config['mysql'][$DBName][$DBType][$master_or_slave]['database'] : $DBConfig[$master_or_slave]['database'];
     $charset = empty($DBConfig['charset']) ? DBConfig::$config['mysql'][$DBName][$DBType][$master_or_slave]['charset'] : strtolower($DBConfig['charset']);
     $db_key = md5(implode('-', array($hostspec, $port, $username, $database, $charset)));
     self::$linkConfig = array('host' => $hostspec, 'port' => $port, 'db' => $database, 'charset' => $charset);
     if (isset(self::$links[$db_key]) && !$reConnect) {
         return self::$links[$db_key];
     }
     // self::$links[$db_key] = new PDO($dsn, $username, $password);
     $dsn = "mysql:dbname={$database};port={$port};host={$hostspec}";
     $connectType = $reConnect ? 'db_reconnect' : 'db_connect';
     defined('DAGGER_DEBUG') && BaseModelCommon::debug($dsn . "|username:{$username}|pw:***", $connectType);
     $mysqli = mysqli_init();
     $mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 4);
     if ($mysqli->real_connect($hostspec, $username, $password, $database, $port)) {
         $mysqli->set_charset($charset);
         defined('DAGGER_DEBUG') && BaseModelCommon::debug($charset, "db_set_charset");
         self::$links[$db_key] = $mysqli;
         return self::$links[$db_key];
     } else {
         return false;
     }
 }