[ticket/14177] Uses Symfony's Debug ErrorHandler in development environment

PHPBB3-14177
This commit is contained in:
Tristan Darricau 2015-12-11 21:05:53 +01:00
parent 7c05b881c5
commit dee22f4a28
3 changed files with 121 additions and 6 deletions

View file

@ -90,8 +90,14 @@ include($phpbb_root_path . 'includes/functions_compatibility.' . $phpEx);
require($phpbb_root_path . 'includes/constants.' . $phpEx); require($phpbb_root_path . 'includes/constants.' . $phpEx);
require($phpbb_root_path . 'includes/utf/utf_tools.' . $phpEx); require($phpbb_root_path . 'includes/utf/utf_tools.' . $phpEx);
// Set PHP error handler to ours if (PHPBB_ENVIRONMENT === 'development')
set_error_handler(defined('PHPBB_MSG_HANDLER') ? PHPBB_MSG_HANDLER : 'msg_handler'); {
\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 = new \phpbb\class_loader('\\', "{$phpbb_root_path}ext/", $phpEx);
$phpbb_class_loader_ext->register(); $phpbb_class_loader_ext->register();
@ -104,10 +110,17 @@ try
} }
catch (InvalidArgumentException $e) catch (InvalidArgumentException $e)
{ {
if (PHPBB_ENVIRONMENT !== 'development')
{
trigger_error( trigger_error(
'The requested environment ' . PHPBB_ENVIRONMENT . ' is not available.', 'The requested environment ' . PHPBB_ENVIRONMENT . ' is not available.',
E_USER_ERROR E_USER_ERROR
); );
}
else
{
throw $e;
}
} }
$phpbb_class_loader->set_cache($phpbb_container->get('cache.driver')); $phpbb_class_loader->set_cache($phpbb_container->get('cache.driver'));

View file

@ -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();
}
}

View file

@ -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);
}
}