diff --git a/src/Whoops/Exception/Inspector.php b/src/Whoops/Exception/Inspector.php index 29fdc22..108c2ae 100644 --- a/src/Whoops/Exception/Inspector.php +++ b/src/Whoops/Exception/Inspector.php @@ -54,7 +54,39 @@ class Inspector */ public function getExceptionMessage() { - return $this->exception->getMessage(); + return $this->extractDocrefUrl($this->exception->getMessage())['message']; + } + + /** + * Returns a url to the php-manual related to the underlying error - when available. + * + * @return string|null + */ + public function getExceptionDocrefUrl() + { + return $this->extractDocrefUrl($this->exception->getMessage())['url']; + } + + private function extractDocrefUrl($message) { + $docref = [ + 'message' => $message, + 'url' => null, + ]; + + // php embbeds urls to the manual into the Exception message with the following ini-settings defined + // http://php.net/manual/en/errorfunc.configuration.php#ini.docref-root + if (!ini_get('html_errors') || !ini_get('docref_root')) { + return $docref; + } + + $pattern = "/\[(?:[^<]+)<\/a>\]/"; + if (preg_match($pattern, $message, $matches)) { + // -> strip those automatically generated links from the exception message + $docref['message'] = preg_replace($pattern, '', $message, 1); + $docref['url'] = $matches[1]; + } + + return $docref; } /** diff --git a/src/Whoops/Handler/PrettyPageHandler.php b/src/Whoops/Handler/PrettyPageHandler.php index c990bef..9ac8ffb 100644 --- a/src/Whoops/Handler/PrettyPageHandler.php +++ b/src/Whoops/Handler/PrettyPageHandler.php @@ -223,6 +223,7 @@ class PrettyPageHandler extends Handler "title" => $this->getPageTitle(), "name" => explode("\\", $inspector->getExceptionName()), "message" => $inspector->getExceptionMessage(), + "docref_url" => $inspector->getExceptionDocrefUrl(), "code" => $code, "plain_exception" => Formatter::formatExceptionPlain($inspector), "frames" => $frames, diff --git a/src/Whoops/Resources/views/header.html.php b/src/Whoops/Resources/views/header.html.php index b9d4517..0d72f61 100644 --- a/src/Whoops/Resources/views/header.html.php +++ b/src/Whoops/Resources/views/header.html.php @@ -20,6 +20,16 @@