/** * 错误输出 * @param $error */ function halt($error) { $e = array(); if (DEBUG) { // 调试模式下输出错误信息 if (!is_array($error)) { $trace = debug_backtrace(); $e['message'] = $error; $e['file'] = $trace[0]['file']; $e['line'] = $trace[0]['line']; } else { $e = $error; } } EcError::show($e['message'], $e['type'], $e['file'], $e['line']); exit; }
if (!file_exists(ROOT_PATH . 'data/install.lock') && APP_NAME !== 'install') { header("Location: " . url('install/index/index')); exit; } /* 控制器和方法 */ $controller = CONTROLLER_NAME . 'Controller'; $action = ACTION_NAME; /* 控制器类是否存在 */ if (!class_exists($controller)) { E(APP_NAME . '/' . $controller . '.class.php 控制器类不存在', 404); } $obj = new $controller(); /* 是否非法操作 */ if (!preg_match('/^[A-Za-z](\\w)*$/', $action)) { E(APP_NAME . '/' . $controller . '.class.php的' . $action . '() 方法不合法', 404); } /* 控制器类中的方法是否存在 */ if (!method_exists($obj, $action)) { E(APP_NAME . '/' . $controller . '.class.php的' . $action . '() 方法不存在', 404); } /* 执行当前操作 */ $method = new ReflectionMethod($obj, $action); if ($method->isPublic() && !$method->isStatic()) { $obj->{$action}(); } else { /* 操作方法不是Public 抛出异常 */ E(APP_NAME . '/' . $controller . '.class.php的' . $action . '() 方法没有访问权限', 404); } } catch (Exception $e) { EcError::show($e->getMessage(), $e->getCode()); }
public function run() { try { //网址解析 if (function_exists('url_parse_ext')) { url_parse_ext(); //自定义网址解析 } else { $this->_parseUrl(); //解析模块和操作 } //模块或操作为空,则设置默认值 self::$module = empty(self::$module) ? $this->appConfig['MODULE_DEFAULT'] : self::$module; self::$action = empty(self::$action) ? $this->appConfig['ACTION_DEFAULT'] : self::$action; //在其他页面通过$_GET['_module']和$_GET['_action']获取得到当前的模块和操作名 $_GET['_module'] = self::$module; $_GET['_action'] = self::$action; //如果存在初始程序,则先加载初始程序 if (file_exists($this->appConfig['MODULE_PATH'] . $this->appConfig['MODULE_INIT'])) { require $this->appConfig['MODULE_PATH'] . $this->appConfig['MODULE_INIT']; } $this->_define(); //常量定义 //检查指定模块是否存在 if (preg_match("#^[a-z0-9_]+\$#i", self::$module) && $this->_checkModuleExists(self::$module)) { $module = self::$module; } else { if ($this->_checkModuleExists($this->appConfig['MODULE_EMPTY'])) { //如果指定模块不存在,则检查是否存在空模块 $module = $this->appConfig['MODULE_EMPTY']; } else { throw new Exception(self::$module . "模块不存在", 404); //指定模块和空模块都不存在,则显示出错信息,并退出程序。 } } //如果开启静态页面缓存,则尝试读取静态缓存 if (false == $this->_readHtmlCache($module, self::$action)) { //静态缓存读取失败,执行模块操作 $this->_execute($module); } //如果存在回调函数ec_app_end,则在即将结束前调用 if (function_exists('ec_app_end')) { ec_app_end(); } } catch (Exception $e) { EcError::show($e->getMessage(), $e->getCode()); } }