0

这里需要一点帮助。这将不胜感激。我正在帮助一位朋友完成她从客户那里获得的项目,并且不断收到此错误。正在使用本地主机。

错误:

解析错误:语法错误,意外 $end,在第 53 行的 C:\xampp\htdocs\OurCammbackup\libraries\joomla\error\error.php 中期待 T_FUNCTION

代码:

<?php
/**
 * @package     Joomla.Platform
 * @subpackage  Error
 *
 * @copyright   Copyright (C) 2005 - 2012 Open Source Matters, Inc. Allrights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE
 */

 defined('JPATH_PLATFORM') or die;

 // 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);

 /**
  * Error Handling Class
  *
  * 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.Platform
  * @subpackage  Error
  * @since       11.1
  * @deprecated  12.1   Use PHP Exception
  */
    abstract class JError
 {


/**
 * 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.
 * @since  11.1
 */
public static $legacy = false;

/**
 * Array of message levels
 *
 * @var    array
 * @since  11.1
 */

我错过了什么吗?

4

1 回答 1

0

您没有提到版本,但在 3.x 系列中,该文件位于legacy目录中而不是.xjoomla目录中/libraries,所以我将使用 2.5.x

回答你的问题,“是的,你遗漏了一些东西”——文件的其余部分。该文件来自 Joomla 的 2.5.x 系列,长度应超过 900 行,如下所示 2.5.14 版本:

<?php
/**
 * @package     Joomla.Platform
 * @subpackage  Error
 *
 * @copyright   Copyright (C) 2005 - 2013 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE
 */

defined('JPATH_PLATFORM') or die;

// 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);

/**
 * Error Handling Class
 *
 * 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.Platform
 * @subpackage  Error
 * @since       11.1
 * @deprecated  12.1   Use PHP Exception
 */
abstract class JError
{
    /**
     * 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.
     * @since  11.1
     */
    public static $legacy = false;

    /**
     * Array of message levels
     *
     * @var    array
     * @since  11.1
     */
    protected static $levels = array(E_NOTICE => 'Notice', E_WARNING => 'Warning', E_ERROR => 'Error');

    protected static $handlers = array(
        E_NOTICE => array('mode' => 'ignore'),
        E_WARNING => array('mode' => 'ignore'),
        E_ERROR => array('mode' => 'ignore')
    );

    protected static $stack = array();

    /**
     * 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.
     *
     * @since   11.1
     *
     * @deprecated  12.1
     */
    public static function isError(& $object)
    {
        // Deprecation warning.
        JLog::add('JError::isError() is deprecated.', JLog::WARNING, 'deprecated');

        // Supports PHP 5 exception handling
        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
     *
     * @deprecated  12.1
     * @since   11.1
     */
    public static function getError($unset = false)
    {
        // Deprecation warning.
        JLog::add('JError::getError() is deprecated.', JLog::WARNING, 'deprecated');

        if (!isset(JError::$stack[0]))
        {
            return false;
        }

        if ($unset)
        {
            $error = array_shift(JError::$stack);
        }
        else
        {
            $error = &JError::$stack[0];
        }
        return $error;
    }

    /**
     * Method for retrieving the exception stack
     *
     * @return  array  Chronological array of errors that have been stored during script execution
     *
     * @deprecated  12.1
     * @since   11.1
     */
    public static function getErrors()
    {
        // Deprecation warning.
        JLog::add('JError::getErrors() is deprecated.', JLog::WARNING, 'deprecated');

        return JError::$stack;
    }

    /**
     * Method to add non-JError thrown JExceptions to the JError stack for debugging purposes
     *
     * @param   JException  &$e  Add an exception to the stack.
     *
     * @return  void
     *
     * @since       11.1
     * @deprecated  12.1
     */
    public static function addToStack(JException &$e)
    {
        // Deprecation warning.
        JLog::add('JError::addToStack() is deprecated.', JLog::WARNING, 'deprecated');

        JError::$stack[] = &$e;
    }

    /**
     * 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,
     *                               like a database DSN).
     * @param   boolean  $backtrace  Add a stack backtrace to the exception.
     *
     * @return  mixed    The JException object
     *
     * @since       11.1
     * @deprecated  12.1  Use PHP Exception
     * @see         JException
     */
    public static function raise($level, $code, $msg, $info = null, $backtrace = false)
    {
        // Deprecation warning.
        JLog::add('JError::raise() is deprecated.', JLog::WARNING, 'deprecated');

        jimport('joomla.error.exception');

        // Build error object
        $exception = new JException($msg, $code, $level, $info, $backtrace);
        return JError::throwError($exception);
    }

    /**
     * Throw an error
     *
     * @param   object  &$exception  An exception to throw.
     *
     * @return  reference
     *
     * @deprecated  12.1  Use PHP Exception
     * @see     JException
     * @since   11.1
     */
    public static function throwError(&$exception)
    {
        // Deprecation warning.
        JLog::add('JError::throwError() is deprecated.', JLog::WARNING, 'deprecated');

        static $thrown = false;

        // If thrown is hit again, we've come back to JError in the middle of throwing another JError, so die!
        if ($thrown)
        {
            self::handleEcho($exception, array());
            // Inifite loop.
            jexit();
        }

        $thrown = true;
        $level = $exception->get('level');

        // See what to do with this kind of error
        $handler = JError::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()));
        }
        else
        {
            // This is required to prevent a very unhelpful white-screen-of-death
            jexit(
                '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!
        // Remove loop check
        $thrown = false;

        return $reference;
    }

    /**
     * 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
     * @see        raise()
     * @since   11.1
     */
    public static function raiseError($code, $msg, $info = null)
    {
        // Deprecation warning.
        JLog::add('JError::raiseError() is deprecated.', JLog::WARNING, 'deprecated');

        return 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  The configured JError object
     *
     * @deprecated  12.1  Use PHP Exception
     * @see        JError
     * @see        raise()
     * @since      11.1
     */
    public static function raiseWarning($code, $msg, $info = null)
    {
        // Deprecation warning.
        JLog::add('JError::raiseWarning() is deprecated.', JLog::WARNING, 'deprecated');

        return 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   The configured JError object
     *
     * @deprecated       12.1   Use PHP Exception
     * @see     raise()
     * @since   11.1
     */
    public static function raiseNotice($code, $msg, $info = null)
    {
        // Deprecation warning.
        JLog::add('JError::raiseNotice() is deprecated.', JLog::WARNING, 'deprecated');

        return JError::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
     * @since   11.1
     */
    public static function getErrorHandling($level)
    {
        // Deprecation warning.
        JLog::add('JError::getErrorHandling() is deprecated.', JLog::WARNING, 'deprecated');

        return 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.
     *
     * Error handling modes:
     * - ignore
     * - echo
     * - verbose
     * - die
     * - message
     * - log
     * - callback
     *
     * You may also set the error handling for several modes at once using PHP's bit operations.
     * Examples:
     * - 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
     * @since   11.1
     */
    public static function setErrorHandling($level, $mode, $options = null)
    {
        // Deprecation warning.
        JLog::add('JError::setErrorHandling() is deprecated.', JLog::WARNING, 'deprecated');

        $levels = JError::$levels;

        $function = 'handle' . ucfirst($mode);

        if (!is_callable(array('JError', $function)))
        {
            return JError::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)
            {
                continue;
            }

            // Set callback options
            if ($mode == 'callback')
            {
                if (!is_array($options))
                {
                    return JError::raiseError(E_ERROR, 'JError:' . JERROR_ILLEGAL_OPTIONS, 'Options for callback not valid');
                }

                if (!is_callable($options))
                {
                    $tmp = array('GLOBAL');
                    if (is_array($options))
                    {
                        $tmp[0] = $options[0];
                        $tmp[1] = $options[1];
                    }
                    else
                    {
                        $tmp[1] = $options;
                    }

                    return JError::raiseError(
                        E_ERROR,
                        'JError:' . JERROR_CALLBACK_NOT_CALLABLE,
                        'Function is not callable',
                        'Function:' . $tmp[1] . ' scope ' . $tmp[0] . '.'
                    );
                }
            }

            // Save settings
            JError::$handlers[$eLevel] = array('mode' => $mode);
            if ($options != null)
            {
                JError::$handlers[$eLevel]['options'] = $options;
            }
        }

        return true;
    }

    /**
     * Method that attaches the error handler to JError
     *
     * @return  void
     *
     * @deprecated  12.1
     * @see     set_error_handler
     * @since   11.1
     */
    public static function attachHandler()
    {
        // Deprecation warning.
        JLog::add('JError::getErrorHandling() is deprecated.', JLog::WARNING, 'deprecated');

        set_error_handler(array('JError', 'customErrorHandler'));
    }

    /**
     * Method that detaches the error handler from JError
     *
     * @return  void
     *
     * @deprecated  12.1
     * @see     restore_error_handler
     * @since   11.1
     */
    public static function detachHandler()
    {
        // Deprecation warning.
        JLog::add('JError::detachHandler() is deprecated.', JLog::WARNING, 'deprecated');

        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
     * - E_NOTICE
     * - E_WARNING
     * - E_NOTICE
     *
     * @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
     *
     * @deprecated  12.1
     * @since   11.1
     */
    public static function registerErrorLevel($level, $name, $handler = 'ignore')
    {
        // Deprecation warning.
        JLog::add('JError::registerErrorLevel() is deprecated.', JLog::WARNING, 'deprecated');

        if (isset(JError::$levels[$level]))
        {
            return false;
        }

        JError::$levels[$level] = $name;
        JError::setErrorHandling($level, $handler);

        return true;
    }

    /**
     * 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
     *
     * @deprecated  12.1
     * @since   11.1
     */

    public static function translateErrorLevel($level)
    {
        // Deprecation warning.
        JLog::add('JError::translateErrorLevel() is deprecated.', JLog::WARNING, 'deprecated');

        if (isset(JError::$levels[$level]))
        {
            return JError::$levels[$level];
        }

        return false;
    }

    /**
     * Ignore error handler
     * - Ignores the error
     *
     * @param   object  &$error   Exception object to handle
     * @param   array   $options  Handler options
     *
     * @return  object   The exception object
     *
     * @deprecated  12.1
     * @see     raise()
     * @since   11.1
     */
    public static function handleIgnore(&$error, $options)
    {
        // Deprecation warning.
        JLog::add('JError::handleIgnore() is deprecated.', JLog::WARNING, 'deprecated');

        return $error;
    }

    /**
     * Echo error handler
     * - Echos the error message to output
     *
     * @param   object  &$error   Exception object to handle
     * @param   array   $options  Handler options
     *
     * @return  object  The exception object
     *
     * @deprecated  12.1
     * @see         raise()
     * @since       11.1
     */
    public static function handleEcho(&$error, $options)
    {
        // Deprecation warning.
        JLog::add('JError::handleEcho() is deprecated.', JLog::WARNING, 'deprecated');

        $level_human = JError::translateErrorLevel($error->get('level'));

        // If system debug is set, then output some more information.
        if (defined('JDEBUG'))
        {
            $backtrace = $error->getTrace();
            $trace = '';
            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']);
                }
                else
                {
                    $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']))
        {
            // output as html
            echo "<br /><b>jos-$level_human</b>: "
                . $error->get('message') . "<br />\n"
                . (defined('JDEBUG') ? nl2br($trace) : '');
        }
        else
        {
            // Output as simple text
            if (defined('STDERR'))
            {
                fwrite(STDERR, "J$level_human: " . $error->get('message') . "\n");
                if (defined('JDEBUG'))
                {
                    fwrite(STDERR, $trace);
                }
            }
            else
            {
                echo "J$level_human: " . $error->get('message') . "\n";
                if (defined('JDEBUG'))
                {
                    echo $trace;
                }
            }
        }

        return $error;
    }

    /**
     * Verbose error handler
     * - 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
     *
     * @deprecated  12.1
     * @see         raise()
     * @since       11.1
     */
    public static function handleVerbose(&$error, $options)
    {
        // Deprecation warning.
        JLog::add('JError::handleVerbose() is deprecated.', JLog::WARNING, 'deprecated');

        $level_human = JError::translateErrorLevel($error->get('level'));
        $info = $error->get('info');

        if (isset($_SERVER['HTTP_HOST']))
        {
            // Output as html
            echo "<br /><b>J$level_human</b>: " . $error->get('message') . "<br />\n";

            if ($info != null)
            {
                echo "&#160;&#160;&#160;" . $info . "<br />\n";
            }

            echo $error->getBacktrace(true);
        }
        else
        {
            // Output as simple text
            echo "J$level_human: " . $error->get('message') . "\n";
            if ($info != null)
            {
                echo "\t" . $info . "\n";
            }

        }

        return $error;
    }

    /**
     * Die error handler
     * - 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
     *
     * @deprecated  12.1
     * @see         raise()
     * @since       11.1
     */
    public static function handleDie(&$error, $options)
    {
        // Deprecation warning.
        JLog::add('JError::handleDie() is deprecated.', JLog::WARNING, 'deprecated');

        $level_human = JError::translateErrorLevel($error->get('level'));

        if (isset($_SERVER['HTTP_HOST']))
        {
            // Output as html
            jexit("<br /><b>J$level_human</b>: " . $error->get('message') . "<br />\n");
        }
        else
        {
            // Output as simple text
            if (defined('STDERR'))
            {
                fwrite(STDERR, "J$level_human: " . $error->get('message') . "\n");
                jexit();
            }
            else
            {
                jexit("J$level_human: " . $error->get('message') . "\n");
            }
        }

        return $error;
    }

    /**
     * Message error handler
     * 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
     *
     * @deprecated  12.1
     * @see         raise()
     * @since       11.1
     */
    public static function handleMessage(&$error, $options)
    {
        // Deprecation warning.
        JLog::add('JError::handleMessage() is deprecated.', JLog::WARNING, 'deprecated');

        $appl = JFactory::getApplication();
        $type = ($error->get('level') == E_NOTICE) ? 'notice' : 'error';
        $appl->enqueueMessage($error->get('message'), $type);

        return $error;
    }

    /**
     * Log error handler
     * 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
     *
     * @deprecated  12.1
     * @see         raise()
     * @since       11.1
     */
    public static function handleLog(&$error, $options)
    {
        // Deprecation warning.
        JLog::add('JError::handleLog() is deprecated.', JLog::WARNING, 'deprecated');

        static $log;

        if ($log == null)
        {
            $fileName = date('Y-m-d') . '.error.log';
            $options['format'] = "{DATE}\t{TIME}\t{LEVEL}\t{CODE}\t{MESSAGE}";
            $log = JLog::getInstance($fileName, $options);
        }

        $entry['level'] = $error->get('level');
        $entry['code'] = $error->get('code');
        $entry['message'] = str_replace(array("\r", "\n"), array('', '\\n'), $error->get('message'));
        $log->addEntry($entry);

        return $error;
    }

    /**
     * Callback error handler
     * - 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
     *
     * @deprecated  12.1
     * @see         raise()
     * @since       11.1
     */
    public static function handleCallback(&$error, $options)
    {
        // Deprecation warning.
        JLog::add('JError::handleCallback() is deprecated.', JLog::WARNING, 'deprecated');

        return call_user_func($options, $error);
    }

    /**
     * Display a custom error page and exit gracefully
     *
     * @param   object  &$error  Exception object
     *
     * @return  void
     *
     * @deprecated  12.1
     * @since   11.1
     */
    public static function customErrorPage(&$error)
    {
        // Deprecation warning.
        JLog::add('JError::customErrorPage() is deprecated.', JLog::WARNING, 'deprecated');

        // Initialise variables.
        $app = JFactory::getApplication();
        $document = JDocument::getInstance('error');
        if ($document)
        {
            $config = JFactory::getConfig();

            // Get the current template from the application
            $template = $app->getTemplate();

            // Push the error object into the document
            $document->setError($error);

            @ob_end_clean();
            $document->setTitle(JText::_('Error') . ': ' . $error->get('code'));
            $data = $document->render(false, array('template' => $template, 'directory' => JPATH_THEMES, 'debug' => $config->get('debug')));

            // Failsafe to get the error displayed.
            if (empty($data))
            {
                self::handleEcho($error, array());
            }
            else
            {
                // Do not allow cache
                JResponse::allowCache(false);

                JResponse::setBody($data);
                echo JResponse::toString();
            }
        }
        else
        {
            // Just echo the error since there is no document
            // This is a common use case for Command Line Interface applications.
            self::handleEcho($error, array());
        }
        $app->close(0);
    }

    /**
     * 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.
     *
     * @return  void
     *
     * @deprecated  12.1
     * @since   11.1
     */
    public static function customErrorHandler($level, $msg)
    {
        // Deprecation warning.
        JLog::add('JError::customErrorHandler() is deprecated.', JLog::WARNING, 'deprecated');

        JError::raise($level, '', $msg);
    }

    /**
     * Render the backtrace
     *
     * @param   integer  $error  The error
     *
     * @return  string  Contents of the backtrace
     *
     * @deprecated  12.1
     * @since   11.1
     */
    public static function renderBacktrace($error)
    {
        // Deprecation warning.
        JLog::add('JError::renderBacktrace() is deprecated.', JLog::WARNING, 'deprecated');

        $contents = null;
        $backtrace = $error->getTrace();

        if (is_array($backtrace))
        {
            ob_start();
            $j = 1;
            echo '<table cellpadding="0" cellspacing="0" class="Table">';
            echo '      <tr>';
            echo '              <td colspan="3" class="TD"><strong>Call stack</strong></td>';
            echo '      </tr>';
            echo '      <tr>';
            echo '              <td class="TD"><strong>#</strong></td>';
            echo '              <td class="TD"><strong>Function</strong></td>';
            echo '              <td class="TD"><strong>Location</strong></td>';
            echo '      </tr>';

            for ($i = count($backtrace) - 1; $i >= 0; $i--)
            {
                echo '      <tr>';
                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>';
                }
                else
                {
                    echo '      <td class="TD">' . $backtrace[$i]['function'] . '()</td>';
                }

                if (isset($backtrace[$i]['file']))
                {
                    echo '              <td class="TD">' . $backtrace[$i]['file'] . ':' . $backtrace[$i]['line'] . '</td>';
                }
                else
                {
                    echo '              <td class="TD">&#160;</td>';
                }

                echo '      </tr>';
                $j++;
            }

            echo '</table>';
            $contents = ob_get_contents();
            ob_end_clean();
        }

        return $contents;
    }
}
于 2013-08-15T07:43:49.643 回答