/** * Logs or displays exception. * @param Exception * @param bool is writing to standard output buffer allowed? * @return void */ public static function processException(Exception $exception, $outputAllowed = FALSE) { if (self::$logFile) { error_log("PHP Fatal error: Uncaught {$exception}"); $file = @strftime('%d-%b-%Y %H-%M-%S ', Debug::$time) . strstr(number_format(Debug::$time, 4, '~', ''), '~'); $file = dirname(self::$logFile) . "/exception {$file}.html"; self::$logHandle = @fopen($file, 'x'); if (self::$logHandle) { ob_start(array(__CLASS__, 'writeFile'), 1); self::paintBlueScreen($exception); ob_end_flush(); fclose(self::$logHandle); } if (self::$sendEmails) { self::sendEmail((string) $exception); } } elseif (self::$productionMode) { // be quiet } elseif (self::$consoleMode) { // dump to console if ($outputAllowed) { echo "{$exception}\n"; foreach (self::$colophons as $callback) { foreach ((array) call_user_func($callback, 'bluescreen') as $line) { echo strip_tags($line) . "\n"; } } } } elseif (self::$firebugDetected && self::$ajaxDetected && !headers_sent()) { // AJAX mode self::fireLog($exception, self::EXCEPTION); } elseif ($outputAllowed) { // dump to browser self::paintBlueScreen($exception); } elseif (self::$firebugDetected && !headers_sent()) { self::fireLog($exception, self::EXCEPTION); } }
/** * Logs or displays exception. * @param Exception * @param bool is writing to standard output buffer allowed? * @return void */ public static function processException(Exception $exception, $outputAllowed = FALSE) { if (!self::$enabled) { return; } elseif (self::$logFile) { try { $hash = md5($exception . (method_exists($exception, 'getPrevious') ? $exception->getPrevious() : (isset($exception->previous) ? $exception->previous : ''))); self::log("PHP Fatal error: Uncaught " . str_replace("Stack trace:\n" . $exception->getTraceAsString(), '', $exception)); foreach (new DirectoryIterator(dirname(self::$logFile)) as $entry) { if (strpos($entry, $hash)) { $skip = TRUE; break; } } $file = dirname(self::$logFile) . "/exception " . @date('Y-m-d H-i-s') . " {$hash}.html"; if (empty($skip) && (self::$logHandle = @fopen($file, 'w'))) { ob_start(); // double buffer prevents sending HTTP headers in some PHP ob_start(array(__CLASS__, '_writeFile'), 1); self::_paintBlueScreen($exception); ob_end_flush(); ob_end_clean(); fclose(self::$logHandle); } if (self::$sendEmails) { self::sendEmail((string) $exception); } } catch (Exception $e) { if (!headers_sent()) { header('HTTP/1.1 500 Internal Server Error'); } echo 'Debug fatal error: ', get_class($e), ': ', ($e->getCode() ? '#' . $e->getCode() . ' ' : '') . $e->getMessage(), "\n"; exit; } } elseif (self::$productionMode) { // be quiet } elseif (self::$consoleMode) { // dump to console if ($outputAllowed) { echo "{$exception}\n"; } } elseif (self::$firebugDetected && self::$ajaxDetected && !headers_sent()) { // AJAX mode self::fireLog($exception, self::EXCEPTION); } elseif ($outputAllowed) { // dump to browser if (!headers_sent()) { @ob_end_clean(); while (ob_get_level() && @ob_end_clean()) { } if (in_array('Content-Encoding: gzip', headers_list())) { header('Content-Encoding: identity', TRUE); } // override gzhandler } self::_paintBlueScreen($exception); } elseif (self::$firebugDetected && !headers_sent()) { self::fireLog($exception, self::EXCEPTION); } foreach (self::$onFatalError as $handler) { call_user_func($handler, $exception); } }
/** * Debug exception handler. * * @param Exception * @return void */ public static function exceptionHandler(Exception $exception) { if (!headers_sent()) { header('HTTP/1.1 500 Internal Server Error'); } if (self::$logFile) { // log to file error_log("PHP Fatal error: Uncaught {$exception}"); $file = @strftime('%d-%b-%Y %H-%M-%S ', Debug::$time) . strstr(number_format(Debug::$time, 4, '~', ''), '~'); $file = dirname(self::$logFile) . "/exception {$file}.html"; self::$logHandle = @fopen($file, 'x'); if (self::$logHandle) { ob_start(array(__CLASS__, 'writeFile'), 1); self::paintBlueScreen($exception); ob_end_flush(); fclose(self::$logHandle); } self::observeErrorLog(); } elseif (!self::$html || isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] === 'XMLHttpRequest') { // console or AJAX mode if (self::$useFirebug && !headers_sent()) { self::fireLog($exception); } else { echo "{$exception}\n"; foreach (self::$colophons as $callback) { foreach ((array) call_user_func($callback, 'bluescreen') as $line) { echo strip_tags($line) . "\n"; } } } } else { // dump to screen while (ob_get_level() && @ob_end_clean()) { } self::paintBlueScreen($exception); exit; } }
static function processException(Exception $exception, $outputAllowed = FALSE) { if (!self::$enabled) { return; } elseif (self::$logFile) { try { $hash = md5($exception . (method_exists($exception, 'getPrevious') ? $exception->getPrevious() : (isset($exception->previous) ? $exception->previous : ''))); error_log("PHP Fatal error: Uncaught {$exception}"); foreach (new DirectoryIterator(dirname(self::$logFile)) as $entry) { if (strpos($entry, $hash)) { $skip = TRUE; break; } } $file = dirname(self::$logFile) . "/exception " . @date('Y-m-d H-i-s') . " {$hash}.html"; if (empty($skip) && (self::$logHandle = @fopen($file, 'x'))) { ob_start(); ob_start(array(__CLASS__, '_writeFile'), 1); self::_paintBlueScreen($exception); ob_end_flush(); ob_end_clean(); fclose(self::$logHandle); } if (self::$sendEmails) { self::sendEmail((string) $exception); } } catch (Exception $e) { if (!headers_sent()) { header('HTTP/1.1 500 Internal Server Error'); } echo 'Nette\\Debug fatal error: ', get_class($e), ': ', ($e->getCode() ? '#' . $e->getCode() . ' ' : '') . $e->getMessage(), "\n"; exit; } } elseif (self::$productionMode) { } elseif (self::$consoleMode) { if ($outputAllowed) { echo "{$exception}\n"; foreach (self::$colophons as $callback) { foreach ((array) call_user_func($callback, 'bluescreen') as $line) { echo strip_tags($line) . "\n"; } } } } elseif (self::$firebugDetected && self::$ajaxDetected && !headers_sent()) { self::fireLog($exception, self::EXCEPTION); } elseif ($outputAllowed) { if (!headers_sent()) { @ob_end_clean(); while (ob_get_level() && @ob_end_clean()) { } if (in_array('Content-Encoding: gzip', headers_list())) { header('Content-Encoding: identity', TRUE); } } self::_paintBlueScreen($exception); } elseif (self::$firebugDetected && !headers_sent()) { self::fireLog($exception, self::EXCEPTION); } foreach (self::$onFatalError as $handler) { call_user_func($handler, $exception); } }
/** * Logs message or exception to file (if set) and sends e-mail notification (if enabled). * @param string|Exception * @param int * @return void */ public static function log($message, $priority = self::INFO) { if (!self::$logFile) { return; } if ($message instanceof Exception) { $exception = $message; $message = "PHP Fatal error: Uncaught exception " . get_class($exception) . " with message '" . $exception->getMessage() . "' in " . $exception->getFile() . ":" . $exception->getLine(); } error_log(@date('[Y-m-d H-i-s] ') . trim($message) . (self::$source ? ' @ ' . self::$source : '') . PHP_EOL, 3, self::$logFile); if ($priority === self::ERROR && self::$sendEmails && @filemtime(self::$logFile . '.email-sent') + self::$emailSnooze < time() && @file_put_contents(self::$logFile . '.email-sent', 'sent')) { // @ - file may not be writable call_user_func(self::$mailer, $message); } if (isset($exception)) { $hash = md5($exception . (method_exists($exception, 'getPrevious') ? $exception->getPrevious() : (isset($exception->previous) ? $exception->previous : ''))); foreach (new DirectoryIterator(dirname(self::$logFile)) as $entry) { if (strpos($entry, $hash)) { $skip = TRUE; break; } } if (empty($skip) && (self::$logHandle = @fopen(dirname(self::$logFile) . "/exception " . @date('Y-m-d H-i-s') . " {$hash}.html", 'w'))) { ob_start(); // double buffer prevents sending HTTP headers in some PHP ob_start(array(__CLASS__, '_writeFile'), 1); self::_paintBlueScreen($exception); ob_end_flush(); ob_end_clean(); fclose(self::$logHandle); } } }
/** * Logs or displays exception. * @param Exception * @param bool is writing to standard output buffer allowed? * @return void */ public static function processException(Exception $exception, $outputAllowed = FALSE) { if (!self::$enabled) { return; } elseif (self::$logFile) { error_log("PHP Fatal error: Uncaught {$exception}"); $file = @strftime('%d-%b-%Y %H-%M-%S ', self::$time) . strstr(number_format(self::$time, 4, '~', ''), '~'); $file = dirname(self::$logFile) . "/exception {$file}.html"; self::$logHandle = @fopen($file, 'x'); if (self::$logHandle) { ob_start(array(__CLASS__, '_writeFile'), 1); self::_paintBlueScreen($exception); ob_end_flush(); fclose(self::$logHandle); } if (self::$sendEmails) { self::sendEmail((string) $exception); } } elseif (self::$productionMode) { // be quiet } elseif (self::$consoleMode) { // dump to console if ($outputAllowed) { echo "{$exception}\n"; foreach (self::$colophons as $callback) { foreach ((array) call_user_func($callback, 'bluescreen') as $line) { echo strip_tags($line) . "\n"; } } } } elseif (self::$firebugDetected && self::$ajaxDetected && !headers_sent()) { // AJAX mode self::fireLog($exception, self::EXCEPTION); } elseif ($outputAllowed) { // dump to browser if (!headers_sent()) { @ob_end_clean(); while (ob_get_level() && @ob_end_clean()) { } if (in_array('Content-Encoding: gzip', headers_list())) { header('Content-Encoding: identity', TRUE); } // override gzhandler } self::_paintBlueScreen($exception); } elseif (self::$firebugDetected && !headers_sent()) { self::fireLog($exception, self::EXCEPTION); } foreach (self::$onFatalError as $handler) { call_user_func($handler, $exception); } }