diff options
author | Marc Alexander <admin@m-a-styles.de> | 2015-12-20 12:59:23 +0100 |
---|---|---|
committer | Marc Alexander <admin@m-a-styles.de> | 2015-12-20 12:59:23 +0100 |
commit | c2a5411dcb50a732585ab72844fed88dc7770edc (patch) | |
tree | b5ea882c7aa56d38e763ce2b7ee2d87415e04d98 /phpBB | |
parent | 96bd53170139816546c17f58f62d38f6e8f259cd (diff) | |
parent | 6ffbd26377ae7a29dd10f3df5a3a4f76504e7d77 (diff) | |
download | forums-c2a5411dcb50a732585ab72844fed88dc7770edc.tar forums-c2a5411dcb50a732585ab72844fed88dc7770edc.tar.gz forums-c2a5411dcb50a732585ab72844fed88dc7770edc.tar.bz2 forums-c2a5411dcb50a732585ab72844fed88dc7770edc.tar.xz forums-c2a5411dcb50a732585ab72844fed88dc7770edc.zip |
Merge pull request #4076 from Nicofuma/ticket/14177
[ticket/14177] Uses Symfony's Debug ErrorHandler in development environment
Diffstat (limited to 'phpBB')
-rw-r--r-- | phpBB/common.php | 25 | ||||
-rw-r--r-- | phpBB/phpbb/debug/debug.php | 80 | ||||
-rw-r--r-- | phpBB/phpbb/debug/error_handler.php | 31 |
3 files changed, 130 insertions, 6 deletions
diff --git a/phpBB/common.php b/phpBB/common.php index 38761cfadc..48bd13e80d 100644 --- a/phpBB/common.php +++ b/phpBB/common.php @@ -90,8 +90,14 @@ include($phpbb_root_path . 'includes/functions_compatibility.' . $phpEx); require($phpbb_root_path . 'includes/constants.' . $phpEx); require($phpbb_root_path . 'includes/utf/utf_tools.' . $phpEx); -// Set PHP error handler to ours -set_error_handler(defined('PHPBB_MSG_HANDLER') ? PHPBB_MSG_HANDLER : 'msg_handler'); +if (PHPBB_ENVIRONMENT === 'development') +{ + \phpbb\debug\debug::enable(); +} +else +{ + set_error_handler(defined('PHPBB_MSG_HANDLER') ? PHPBB_MSG_HANDLER : 'msg_handler'); +} $phpbb_class_loader_ext = new \phpbb\class_loader('\\', "{$phpbb_root_path}ext/", $phpEx); $phpbb_class_loader_ext->register(); @@ -104,10 +110,17 @@ try } catch (InvalidArgumentException $e) { - trigger_error( - 'The requested environment ' . PHPBB_ENVIRONMENT . ' is not available.', - E_USER_ERROR - ); + if (PHPBB_ENVIRONMENT !== 'development') + { + trigger_error( + 'The requested environment ' . PHPBB_ENVIRONMENT . ' is not available.', + E_USER_ERROR + ); + } + else + { + throw $e; + } } $phpbb_class_loader->set_cache($phpbb_container->get('cache.driver')); diff --git a/phpBB/phpbb/debug/debug.php b/phpBB/phpbb/debug/debug.php new file mode 100644 index 0000000000..c5ffada2e5 --- /dev/null +++ b/phpBB/phpbb/debug/debug.php @@ -0,0 +1,80 @@ +<?php +/** +* +* This file is part of the phpBB Forum Software package. +* +* @copyright (c) phpBB Limited <https://www.phpbb.com> +* @license GNU General Public License, version 2 (GPL-2.0) +* +* For full copyright and license information, please see +* the docs/CREDITS.txt file. +* +*/ + +namespace phpbb\debug; + +use Symfony\Component\Debug\BufferingLogger; +use Symfony\Component\Debug\DebugClassLoader; +use Symfony\Component\Debug\ExceptionHandler; + +/** + * Registers all the debug tools. + + * @see Symfony\Component\Debug\Debug + */ +class debug +{ + private static $enabled = false; + + /** + * Enables the debug tools. + * + * This method registers an error handler and an exception handler. + * + * If the Symfony ClassLoader component is available, a special + * class loader is also registered. + * + * @param int $errorReportingLevel The level of error reporting you want + * @param bool $displayErrors Whether to display errors (for development) or just log them (for production) + */ + public static function enable($errorReportingLevel = null, $displayErrors = true) + { + if (static::$enabled) + { + return; + } + + static::$enabled = true; + + if ($errorReportingLevel !== null) + { + error_reporting($errorReportingLevel); + } + else + { + error_reporting(-1); + } + + if ('cli' !== php_sapi_name()) + { + ini_set('display_errors', 0); + ExceptionHandler::register(); + } + else if ($displayErrors && (!ini_get('log_errors') || ini_get('error_log'))) + { + // CLI - display errors only if they're not already logged to STDERR + ini_set('display_errors', 1); + } + + if ($displayErrors) + { + error_handler::register(new error_handler(new BufferingLogger())); + } + else + { + error_handler::register()->throwAt(0, true); + } + + DebugClassLoader::enable(); + } +} diff --git a/phpBB/phpbb/debug/error_handler.php b/phpBB/phpbb/debug/error_handler.php new file mode 100644 index 0000000000..246e724f56 --- /dev/null +++ b/phpBB/phpbb/debug/error_handler.php @@ -0,0 +1,31 @@ +<?php +/** +* +* This file is part of the phpBB Forum Software package. +* +* @copyright (c) phpBB Limited <https://www.phpbb.com> +* @license GNU General Public License, version 2 (GPL-2.0) +* +* For full copyright and license information, please see +* the docs/CREDITS.txt file. +* +*/ + +namespace phpbb\debug; + +use Symfony\Component\Debug\ErrorHandler; + +class error_handler extends ErrorHandler +{ + public function handleError($type, $message, $file, $line, array $context, array $backtrace = null) + { + if ($type === E_USER_WARNING || $type === E_USER_NOTICE) + { + $handler = defined('PHPBB_MSG_HANDLER') ? PHPBB_MSG_HANDLER : 'msg_handler'; + + $handler($type, $message, $file, $line); + } + + return parent::handleError($type, $message, $file, $line, $context, $backtrace); + } +} |