Source for file error.php
Documentation is available at error.php
* @copyright Copyright (C) 2005 - 2013 Open Source Matters, Inc. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE
// Error Definition: Illegal Options
const JERROR_ILLEGAL_OPTIONS =
1;
// Error Definition: Callback does not exist
const JERROR_CALLBACK_NOT_CALLABLE =
2;
// Error Definition: Illegal Handler
const JERROR_ILLEGAL_MODE =
3;
* 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>
* @deprecated 12.1 (Platform) & 4.0 (CMS) - Use PHP Exception
* Legacy error handling marker
* @var boolean True to enable legacy error handling using JError, false to use exception handling. This flag
* is present to allow an easy transition into exception handling for code written against the
* existing JError API in Joomla.
public static $legacy =
false;
* Array of message levels
protected static $levels =
array(E_NOTICE =>
'Notice', E_WARNING =>
'Warning', E_ERROR =>
'Error');
* Array of message handlers
protected static $handlers =
array(
E_NOTICE =>
array('mode' =>
'ignore'),
E_WARNING =>
array('mode' =>
'ignore'),
E_ERROR =>
array('mode' =>
'ignore')
* Array containing the error stack
protected static $stack =
array();
* Method to determine if a value is an exception object.
* @param mixed $object Object to check.
* @return boolean True if argument is an exception, false otherwise.
public static function isError($object)
JLog::add('JError::isError() is deprecated.', JLog::WARNING, 'deprecated');
return $object instanceof
Exception;
* Method for retrieving the last exception object in the error stack
* @param boolean $unset True to remove the error from the stack.
* @return mixed Last exception object in the error stack or boolean false if none exist
public static function getError($unset =
false)
JLog::add('JError::getError() is deprecated.', JLog::WARNING, 'deprecated');
if (!isset
(self::$stack[0]))
$error =
&self::$stack[0];
* Method for retrieving the exception stack
* @return array Chronological array of errors that have been stored during script execution
JLog::add('JError::getErrors() is deprecated.', JLog::WARNING, 'deprecated');
* Method to add non-JError thrown JExceptions to the JError stack for debugging purposes
* @param JException &$e Add an exception to the stack.
JLog::add('JError::addToStack() is deprecated.', JLog::WARNING, 'deprecated');
* Create a new JException object given the passed arguments
* @param integer $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,
* @param boolean $backtrace Add a stack backtrace to the exception.
* @return mixed The JException object
* @deprecated 12.1 Use PHP Exception
public static function raise($level, $code, $msg, $info =
null, $backtrace =
false)
JLog::add('JError::raise() is deprecated.', JLog::WARNING, 'deprecated');
$exception =
new JException($msg, $code, $level, $info, $backtrace);
return self::throwError($exception);
* @param object &$exception An exception to throw.
* @deprecated 12.1 Use PHP Exception
JLog::add('JError::throwError() is deprecated.', JLog::WARNING, 'deprecated');
// If thrown is hit again, we've come back to JError in the middle of throwing another JError, so die!
self::handleEcho($exception, array());
$level =
$exception->get('level');
// See what to do with this kind of error
$handler =
self::getErrorHandling($level);
$function =
'handle' .
ucfirst($handler['mode']);
if (is_callable(array('JError', $function)))
$reference =
call_user_func_array(array('JError', $function), array(&$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()
// We don't need to store the error, since JException already does that for us!
* Wrapper method for the 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
* @deprecated 12.1 Use PHP Exception
public static function raiseError($code, $msg, $info =
null)
JLog::add('JError::raiseError() is deprecated.', JLog::WARNING, 'deprecated');
return self::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 The configured JError object
* @deprecated 12.1 Use PHP Exception
public static function raiseWarning($code, $msg, $info =
null)
JLog::add('JError::raiseWarning() is deprecated.', JLog::WARNING, 'deprecated');
return self::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 The configured JError object
* @deprecated 12.1 Use PHP Exception
public static function raiseNotice($code, $msg, $info =
null)
JLog::add('JError::raiseNotice() is deprecated.', JLog::WARNING, 'deprecated');
return self::raise(E_NOTICE, $code, $msg, $info);
* Method to get the current error handler settings for a specified error level.
* @param integer $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
* @deprecated 12.1 Use PHP Exception
JLog::add('JError::getErrorHandling() is deprecated.', JLog::WARNING, 'deprecated');
return self::$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 integer $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.
* @deprecated 12.1 Use PHP Exception
public static function setErrorHandling($level, $mode, $options =
null)
JLog::add('JError::setErrorHandling() is deprecated.', JLog::WARNING, 'deprecated');
$function =
'handle' .
ucfirst($mode);
return self::raiseError(E_ERROR, 'JError:' .
JERROR_ILLEGAL_MODE, 'Error Handling mode is not known', 'Mode: ' .
$mode .
' is not implemented.');
foreach ($levels as $eLevel =>
$eTitle)
if (($level & $eLevel) !=
$eLevel)
return self::raiseError(E_ERROR, 'JError:' .
JERROR_ILLEGAL_OPTIONS, 'Options for callback not valid');
'JError:' .
JERROR_CALLBACK_NOT_CALLABLE,
'Function is not callable',
'Function:' .
$tmp[1] .
' scope ' .
$tmp[0] .
'.'
self::$handlers[$eLevel] =
array('mode' =>
$mode);
self::$handlers[$eLevel]['options'] =
$options;
* Method that attaches the error handler to JError
JLog::add('JError::getErrorHandling() is deprecated.', JLog::WARNING, 'deprecated');
* Method that detaches the error handler from JError
* @see restore_error_handler
JLog::add('JError::detachHandler() is deprecated.', JLog::WARNING, 'deprecated');
* Method to register a new error level for handling errors
* This allows you to add custom error levels to the built-in
* @param integer $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
JLog::add('JError::registerErrorLevel() is deprecated.', JLog::WARNING, 'deprecated');
if (isset
(self::$levels[$level]))
self::$levels[$level] =
$name;
self::setErrorHandling($level, $handler);
* Translate an error level integer to a human readable string
* e.g. E_ERROR will be translated to 'Error'
* @param integer $level Error level to translate
* @return mixed Human readable error level name or boolean false if it doesn't exist
JLog::add('JError::translateErrorLevel() is deprecated.', JLog::WARNING, 'deprecated');
if (isset
(self::$levels[$level]))
return self::$levels[$level];
* @param object &$error Exception object to handle
* @param array $options Handler options
* @return object The exception object
JLog::add('JError::handleIgnore() is deprecated.', JLog::WARNING, 'deprecated');
* - Echos the error message to output
* @param object &$error Exception object to handle
* @param array $options Handler options
* @return object The exception object
public static function handleEcho(&$error, $options)
JLog::add('JError::handleEcho() is deprecated.', JLog::WARNING, 'deprecated');
$level_human =
self::translateErrorLevel($error->get('level'));
// If system debug is set, then output some more information.
$backtrace =
$error->getTrace();
for ($i =
count($backtrace) -
1; $i >=
0; $i--
)
if (isset
($backtrace[$i]['class']))
$trace .=
sprintf("\n%s %s %s()", $backtrace[$i]['class'], $backtrace[$i]['type'], $backtrace[$i]['function']);
$trace .=
sprintf("\n%s()", $backtrace[$i]['function']);
if (isset
($backtrace[$i]['file']))
$trace .=
sprintf(' @ %s:%d', $backtrace[$i]['file'], $backtrace[$i]['line']);
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
JLog::add('JError::handleVerbose() is deprecated.', JLog::WARNING, 'deprecated');
$level_human =
self::translateErrorLevel($error->get('level'));
$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";
echo
"\t" .
$info .
"\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
public static function handleDie(&$error, $options)
JLog::add('JError::handleDie() is deprecated.', JLog::WARNING, 'deprecated');
$level_human =
self::translateErrorLevel($error->get('level'));
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
JLog::add('JError::hanleMessage() is deprecated.', JLog::WARNING, 'deprecated');
$type =
($error->get('level') ==
E_NOTICE) ?
'notice' :
'error';
$appl->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
public static function handleLog(&$error, $options)
JLog::add('JError::handleLog() is deprecated.', JLog::WARNING, 'deprecated');
$options['text_file'] =
date('Y-m-d') .
'.error.log';
$options['format'] =
"{DATE}\t{TIME}\t{LEVEL}\t{CODE}\t{MESSAGE}";
str_replace(array("\r", "\n"), array('', '\\n'), $error->get('message')),
$entry->code =
$error->get('code');
* - 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
JLog::add('JError::handleCallback() is deprecated.', JLog::WARNING, 'deprecated');
* Display a custom error page and exit gracefully
* @param object &$error Exception object
JLog::add('JError::customErrorPage() is deprecated.', JLog::WARNING, 'deprecated');
// Get the current template from the application
// Push the error object into the document
$document->setError($error);
// If site is offline and it's a 404 error, just go to index (to see offline message, instead of 404)
$document->setTitle(JText::_('Error') .
': ' .
$error->getCode());
$data =
$document->render(false, array('template' =>
$template, 'directory' =>
JPATH_THEMES, 'debug' =>
$config->get('debug')));
// Failsafe to get the error displayed.
self::handleEcho($error, array());
// Just echo the error since there is no document
// This is a common use case for Command Line Interface applications.
self::handleEcho($error, array());
* Display a message to the user
* @param integer $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 $msg Error message, shown to user if need be.
JLog::add('JError::customErrorHandler() is deprecated.', JLog::WARNING, 'deprecated');
self::raise($level, '', $msg);
* @param integer $error The error
* @return string Contents of the backtrace
JLog::add('JError::renderBacktrace() is deprecated.', JLog::WARNING, 'deprecated');
$backtrace =
$error->getTrace();
echo
'<table cellpadding="0" cellspacing="0" class="Table">';
echo
' <td colspan="3" class="TD"><strong>Call stack</strong></td>';
echo
' <td class="TD"><strong>#</strong></td>';
echo
' <td class="TD"><strong>Function</strong></td>';
echo
' <td class="TD"><strong>Location</strong></td>';
for ($i =
count($backtrace) -
1; $i >=
0; $i--
)
echo
' <td class="TD">' .
$j .
'</td>';
if (isset
($backtrace[$i]['class']))
echo
' <td class="TD">' .
$backtrace[$i]['class'] .
$backtrace[$i]['type'] .
$backtrace[$i]['function'] .
'()</td>';
echo
' <td class="TD">' .
$backtrace[$i]['function'] .
'()</td>';
if (isset
($backtrace[$i]['file']))
echo
' <td class="TD">' .
$backtrace[$i]['file'] .
':' .
$backtrace[$i]['line'] .
'</td>';
echo
' <td class="TD"> </td>';
Documentation generated on Tue, 19 Nov 2013 15:02:38 +0100 by phpDocumentor 1.4.3