/** * @return string */ private function fileCachedPage() { $context = RequestContext::getMain(); if ($context->getOutput()->isDisabled()) { // Done already? return ''; } if ($context->getTitle()) { // Use the main context's title if we managed to set it $t = $context->getTitle()->getPrefixedDBkey(); } else { // Fallback to the raw title URL param. We can't use the Title // class is it may hit the interwiki table and give a DB error. // We may get a cache miss due to not sanitizing the title though. $t = str_replace(' ', '_', $context->getRequest()->getVal('title')); if ($t == '') { // fallback to main page $t = Title::newFromText($this->msg('mainpage', 'Main Page'))->getPrefixedDBkey(); } } $cache = new HTMLFileCache($t, 'view'); if ($cache->isCached()) { return $cache->fetchText(); } else { return ''; } }
/** * Run the current MediaWiki instance; index.php just calls this */ public function run() { try { $this->setDBProfilingAgent(); try { $this->main(); } catch (ErrorPageError $e) { // Bug 62091: while exceptions are convenient to bubble up GUI errors, // they are not internal application faults. As with normal requests, this // should commit, print the output, do deferred updates, jobs, and profiling. $this->doPreOutputCommit(); $e->report(); // display the GUI error } } catch (Exception $e) { $context = $this->context; $action = $context->getRequest()->getVal('action', 'view'); if ($e instanceof DBConnectionError && $context->hasTitle() && $context->getTitle()->canExist() && in_array($action, ['view', 'history'], true) && HTMLFileCache::useFileCache($this->context, HTMLFileCache::MODE_OUTAGE)) { // Try to use any (even stale) file during outages... $cache = new HTMLFileCache($context->getTitle(), 'view'); if ($cache->isCached()) { $cache->loadFromFileCache($context, HTMLFileCache::MODE_OUTAGE); print MWExceptionRenderer::getHTML($e); exit; } } MWExceptionHandler::handleException($e); } $this->doPostOutputShutdown('normal'); }