/** * 自定义异常处理 * * @param mixed $e 异常对象 */ public function appException(&$e) { if (Cml::$debug) { $run = new Run(); $run->pushHandler(Request::isCli() ? new PlainTextHandler() : new PrettyPageHandler()); $run->handleException($e); } else { $error = []; $error['message'] = $e->getMessage(); $trace = $e->getTrace(); $error['files'][0] = $trace[0]; if (substr($e->getFile(), -20) !== '\\Tools\\functions.php' || $e->getLine() !== 90) { array_unshift($error['files'], ['file' => $e->getFile(), 'line' => $e->getLine(), 'type' => 'throw']); } //正式环境 只显示‘系统错误’并将错误信息记录到日志 Log::emergency($error['message'], [$error['files'][0]]); $error = []; $error['message'] = Lang::get('_CML_ERROR_'); if (Request::isCli()) { \Cml\pd($error); } else { header('HTTP/1.1 500 Internal Server Error'); View::getEngine('html')->reset()->assign('error', $error); Cml::showSystemTemplate(Config::get('html_exception')); } } exit; }
/** * 自定义异常处理 * * @param mixed $e 异常对象 */ public function appException(&$e) { $error = []; $exceptionClass = new \ReflectionClass($e); $error['exception'] = '\\' . $exceptionClass->name; $error['message'] = $e->getMessage(); $trace = $e->getTrace(); foreach ($trace as $key => $val) { $error['files'][$key] = $val; } if (substr($e->getFile(), -20) !== '\\Tools\\functions.php' || $e->getLine() !== 90) { array_unshift($error['files'], ['file' => $e->getFile(), 'line' => $e->getLine(), 'type' => 'throw']); } if (!Cml::$debug) { //正式环境 只显示‘系统错误’并将错误信息记录到日志 Log::emergency($error['message'], [$error['files'][0]]); $error = []; $error['message'] = Lang::get('_CML_ERROR_'); } if (Request::isCli()) { pd($error); } else { header('HTTP/1.1 500 Internal Server Error'); View::getEngine('html')->reset()->assign('error', $error); Cml::showSystemTemplate(Config::get('html_exception')); } }
/** * 渲染显示系统模板 * * @param string $tpl 要渲染的模板文件 */ public static function showSystemTemplate($tpl) { $configSubFix = Config::get('html_template_suffix'); Config::set('html_template_suffix', ''); echo View::getEngine('html')->setHtmlEngineOptions('templateDir', dirname($tpl) . DIRECTORY_SEPARATOR)->fetch(basename($tpl), false, true, true); Config::set('html_template_suffix', $configSubFix); }
/** * 输出调试消息 * * @return void */ public function stopAndShowDebugInfo() { if (Request::isAjax()) { if (Config::get('dump_use_php_console')) { self::$sql && \Cml\dumpUsePHPConsole(self::$sql, 'sql'); \Cml\dumpUsePHPConsole(self::$tipInfo, 'tipInfo'); \Cml\dumpUsePHPConsole(self::$includeFile, 'includeFile'); } else { $deBugLogData = ['tipInfo' => self::$tipInfo]; self::$sql && ($deBugLogData['sql'] = self::$sql); if (!empty($deBugLogData)) { Cml::requireFile(CML_CORE_PATH . DIRECTORY_SEPARATOR . 'ConsoleLog.php', ['deBugLogData' => $deBugLogData]); } } } else { View::getEngine('html')->assign('includeLib', Debug::getIncludeLib())->assign('includeFile', Debug::getIncludeFiles())->assign('tipInfo', Debug::getTipInfo())->assign('sqls', Debug::getSqls())->assign('usetime', Debug::getUseTime())->assign('usememory', Debug::getUseMemory()); Cml::showSystemTemplate(Config::get('debug_page')); } }