Source code for file /joomla/error/error.php
Documentation is available at error.php
* @version $Id: error.php 13385 2009-10-29 13:35:54Z ian $
* @package Joomla.Framework
* @copyright Copyright (C) 2005 - 2008 Open Source Matters. All rights reserved.
* @license GNU/GPL, see LICENSE.php
* Joomla! is free software. This version may have been modified pursuant
* to the GNU General Public License, and as distributed it includes or
* is derivative of works licensed under the GNU General Public License or
* other free or open source software licenses.
* See COPYRIGHT.php for copyright notices and details.
// Check to ensure this file is within the rest of the framework
// Error Definition: Illegal Options
define( 'JERROR_ILLEGAL_OPTIONS', 1 );
// Error Definition: Callback does not exist
define( 'JERROR_CALLBACK_NOT_CALLABLE', 2 );
// Error Definition: Illegal Handler
define( 'JERROR_ILLEGAL_MODE', 3 );
$GLOBALS['_JERROR_STACK'] =
array();
* Default available error levels
$GLOBALS['_JERROR_LEVELS'] =
array(
$GLOBALS['_JERROR_HANDLERS'] =
array(
E_NOTICE =>
array( 'mode' =>
'message' ),
E_WARNING =>
array( 'mode' =>
'message' ),
E_ERROR =>
array( 'mode' =>
'callback', 'options' =>
array('JError','customErrorPage') )
* This class is inspired in design and concept by patErrorManager <http://www.php-tools.net>
* patErrorManager contributors include:
* - gERD Schaufelberger <gerd@php-tools.net>
* - Sebastian Mordziol <argh@php-tools.net>
* - Stephan Schmidt <scst@php-tools.net>
* @package Joomla.Framework
* Method to determine if a value is an exception object. This check supports both JException and PHP5 Exception objects
* @param mixed &$object Object to check
* @return boolean True if argument is an exception, false otherwise.
// supports PHP 5 exception handling
return is_a($object, 'JException') ||
is_a($object, 'JError') ||
is_a($object, 'Exception');
* Method for retrieving the last exception object in the error stack
* @return mixed Last exception object in the error stack or boolean false if none exist
if (!isset
($GLOBALS['_JERROR_STACK'][0])) {
$error =
&$GLOBALS['_JERROR_STACK'][0];
* Method for retrieving the exception stack
* @return array Chronological array of errors that have been stored during script execution
return $GLOBALS['_JERROR_STACK'];
* Create a new JException object given the passed arguments
* @param int $level The error level - use any of PHP's own error levels for this: E_ERROR, E_WARNING, E_NOTICE, E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE.
* @param string $code The application-internal error code for this error
* @param string $msg The error message, which may also be shown the user if need be.
* @param mixed $info Optional: Additional error information (usually only developer-relevant information that the user should never see, like a database DSN).
* @return mixed The JException object
function & raise($level, $code, $msg, $info =
null, $backtrace =
false)
$exception =
new JException($msg, $code, $level, $info, $backtrace);
// see what to do with this kind of error
$function =
'handle'.
ucfirst($handler['mode']);
$reference =
& JError::$function ($exception, (isset
($handler['options'])) ?
$handler['options'] :
array());
// This is required to prevent a very unhelpful white-screen-of-death
'JError::raise -> Static method JError::' .
$function .
' does not exist.' .
' Contact a developer to debug' .
'<br /><strong>Error was</strong> ' .
'<br />' .
$exception->getMessage()
//store and return the error
$GLOBALS['_JERROR_STACK'][] =
& $reference;
* Wrapper method for the {@link raise()} method with predefined error level of E_ERROR and backtrace set to true.
* @param string $code The application-internal error code for this error
* @param string $msg The error message, which may also be shown the user if need be.
* @param mixed $info Optional: Additional error information (usually only developer-relevant information that the user should never see, like a database DSN).
* @return object $error The configured JError object
$reference =
& JError::raise(E_ERROR, $code, $msg, $info, true);
* Wrapper method for the {@link raise()} method with predefined error level of E_WARNING and backtrace set to false.
* @param string $code The application-internal error code for this error
* @param string $msg The error message, which may also be shown the user if need be.
* @param mixed $info Optional: Additional error information (usually only developer-relevant information that the user should never see, like a database DSN).
* @return object $error The configured JError object
$reference =
& JError::raise(E_WARNING, $code, $msg, $info);
* Wrapper method for the {@link raise()} method with predefined error level of E_NOTICE and backtrace set to false.
* @param string $code The application-internal error code for this error
* @param string $msg The error message, which may also be shown the user if need be.
* @param mixed $info Optional: Additional error information (usually only developer-relevant information that the user should never see, like a database DSN).
* @return object $error The configured JError object
$reference =
& JError::raise(E_NOTICE, $code, $msg, $info);
* Method to get the current error handler settings for a specified error level.
* @param int $level The error level to retrieve. This can be any of PHP's own error levels, e.g. E_ALL, E_NOTICE...
* @return array All error handling details
return $GLOBALS['_JERROR_HANDLERS'][$level];
* Method to set the way the JError will handle different error levels. Use this if you want to override the default settings.
* You may also set the error handling for several modes at once using PHP's bit operations.
* - E_ALL = Set the handling for all levels
* - E_ERROR | E_WARNING = Set the handling for errors and warnings
* - E_ALL ^ E_ERROR = Set the handling for all levels except errors
* @param int $level The error level for which to set the error handling
* @param string $mode The mode to use for the error handling.
* @param mixed $options Optional: Any options needed for the given mode.
* @return mixed True on success, or a JException object if failed.
$levels =
$GLOBALS['_JERROR_LEVELS'];
$function =
'handle'.
ucfirst($mode);
foreach ($levels as $eLevel =>
$eTitle) {
if (($level & $eLevel) !=
$eLevel) {
if ($mode ==
'callback') {
$GLOBALS['_JERROR_HANDLERS'][$eLevel] =
array ('mode' =>
$mode);
$GLOBALS['_JERROR_HANDLERS'][$eLevel]['options'] =
$options;
* Method that attaches the error handler to JError
* Method that dettaches the error handler from JError
* @see restore_error_handler
* Method to register a new error level for handling errors
* This allows you to add custom error levels to the built-in
* @param int $level Error level to register
* @param string $name Human readable name for the error level
* @param string $handler Error handler to set for the new error level [optional]
* @return boolean True on success; false if the level already has been registered
if( isset
($GLOBALS['_JERROR_LEVELS'][$level]) ) {
$GLOBALS['_JERROR_LEVELS'][$level] =
$name;
* Translate an error level integer to a human readable string
* e.g. E_ERROR will be translated to 'Error'
* @param int $level Error level to translate
* @return mixed Human readable error level name or boolean false if it doesn't exist
if( isset
($GLOBALS['_JERROR_LEVELS'][$level]) ) {
return $GLOBALS['_JERROR_LEVELS'][$level];
* @param object $error Exception object to handle
* @param array $options Handler options
* @return object The exception object
* - Echos the error message to output
* @param object $error Exception object to handle
* @param array $options Handler options
* @return object The exception object
if (isset
($_SERVER['HTTP_HOST'])) {
echo
"<br /><b>jos-$level_human</b>: ".
$error->get('message').
"<br />\n";
fwrite(STDERR, "J$level_human: ".
$error->get('message').
"\n");
echo
"J$level_human: ".
$error->get('message').
"\n";
* - Echos the error message to output as well as related info
* @param object $error Exception object to handle
* @param array $options Handler options
* @return object The exception object
$info =
$error->get('info');
if (isset
($_SERVER['HTTP_HOST'])) {
echo
"<br /><b>J$level_human</b>: ".
$error->get('message').
"<br />\n";
echo
" ".
$info.
"<br />\n";
echo
$error->getBacktrace(true);
echo
"J$level_human: ".
$error->get('message').
"\n";
* - Echos the error message to output and then dies
* @param object $error Exception object to handle
* @param array $options Handler options
* @return object The exception object
if (isset
($_SERVER['HTTP_HOST'])) {
jexit("<br /><b>J$level_human</b> ".
$error->get('message').
"<br />\n");
fwrite(STDERR, "J$level_human ".
$error->get('message').
"\n");
jexit("J$level_human ".
$error->get('message').
"\n");
* - Enqueues the error message into the system queue
* @param object $error Exception object to handle
* @param array $options Handler options
* @return object The exception object
$type =
($error->get('level') ==
E_NOTICE) ?
'notice' :
'error';
$mainframe->enqueueMessage($error->get('message'), $type);
* - Logs the error message to a system log file
* @param object $error Exception object to handle
* @param array $options Handler options
* @return object The exception object
$fileName =
date('Y-m-d').
'.error.log';
$options['format'] =
"{DATE}\t{TIME}\t{LEVEL}\t{CODE}\t{MESSAGE}";
$entry['level'] =
$error->get('level');
$entry['code'] =
$error->get('code');
$entry['message'] =
str_replace(array ("\r","\n"), array ('','\\n'), $error->get('message'));
* - Send the error object to a callback method for error handling
* @param object $error Exception object to handle
* @param array $options Handler options
* @return object The exception object
* Display a custom error page and exit gracefully
* @param object $error Exception object
jimport('joomla.document.document');
//Get the current language direction
// Get the current template from the application
$template =
$app->getTemplate();
// Push the error object into the document
$document->setError($error);
$document->setTitle(JText::_('Error').
': '.
$error->code);
$document->setLanguage($language->getTag());
$document->setDirection($dir);
$data =
$document->render(false, array (
'directory' =>
JPATH_THEMES,
'debug' =>
$config->getValue('config.debug')