aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTristan Darricau <tristan.darricau@sensiolabs.com>2015-12-11 21:05:53 +0100
committerTristan Darricau <tristan.darricau@sensiolabs.com>2015-12-11 21:05:53 +0100
commitdee22f4a281335b51333ff493b34c026f36e1804 (patch)
tree1d6c39db128c090fbb0be5f62e0e4d5400e9fa95
parent7c05b881c5534520e978785ca6d27cad826fbc67 (diff)
downloadforums-dee22f4a281335b51333ff493b34c026f36e1804.tar
forums-dee22f4a281335b51333ff493b34c026f36e1804.tar.gz
forums-dee22f4a281335b51333ff493b34c026f36e1804.tar.bz2
forums-dee22f4a281335b51333ff493b34c026f36e1804.tar.xz
forums-dee22f4a281335b51333ff493b34c026f36e1804.zip
[ticket/14177] Uses Symfony's Debug ErrorHandler in development environment
PHPBB3-14177
-rw-r--r--phpBB/common.php25
-rw-r--r--phpBB/phpbb/debug/debug.php70
-rw-r--r--phpBB/phpbb/debug/error_handler.php32
3 files changed, 121 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..76308e9197
--- /dev/null
+++ b/phpBB/phpbb/debug/debug.php
@@ -0,0 +1,70 @@
+<?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;
+use Symfony\Component\Filesystem\Exception\IOException;
+
+/**
+ * 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 (null !== $errorReportingLevel) {
+ error_reporting($errorReportingLevel);
+ } else {
+ error_reporting(-1);
+ }
+
+ if ('cli' !== php_sapi_name()) {
+ ini_set('display_errors', 0);
+ ExceptionHandler::register();
+ } elseif ($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..2b182628a8
--- /dev/null
+++ b/phpBB/phpbb/debug/error_handler.php
@@ -0,0 +1,32 @@
+<?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;
+use Symfony\Component\Filesystem\Exception\IOException;
+
+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);
+ }
+}