file = $file; if ($line) { $this->line = $line; } parent::__construct($message, $code, $previous); } public function syntaxHighlight($code) { $code = preg_replace('/"(.*?)"/U', '"$1"', $code); $code = preg_replace('/(\s)\b(.*?)((\b|\s)\()/U', '$1$2$3', $code); $code = preg_replace('/(class)(.+)\s/', '$0', $code); $code = preg_replace('/(\/\/)(.+)\s/', '$0', $code); $code = preg_replace('/(\/\*.*?\*\/)/s', '$0', $code); $code = preg_replace('/(\[|\{|\}|\])/', '$1', $code); $code = preg_replace('/(\(|\)|\->|\=>)/', '$1', $code); $code = preg_replace('/(\$[a-zA-Z0-9_]+)/', '$1', $code); $code = preg_replace('/\b(print|echo|new|function|return|true|false|namespace|use|class|extends|implements)\b/', '$1', $code); return $code; } /** * @param $filename * @param $line * @return string */ private function readErrorFile($filename, $line) { $file = file($filename); $totalLine = count($file); $offset = 6; $offsetStart = $line - $offset; $offsetEnd = $line + $offset; $start = ($offsetStart <= 0) ? 2 : $offsetStart; $end = ($offsetEnd > $totalLine) ? $totalLine : $offsetEnd; $content = ''; for ($i = $start; $i <= $end; $i++) { $content .= '' . $i . ''; $content .= $this->syntaxHighlight(htmlspecialchars($file[$i - 1])) . ''; } return '
' . $content . ''; } /** * @param \Exception|null $exception */ public function handler($exception = null) { if (DEBUG) { $message = htmlspecialchars($exception->getMessage()); $file = $exception->getFile(); $line = $exception->getLine(); $trace = $exception->getTraceAsString(); $content = '
{$message}