⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 errorstack.php

📁 FP2 CRM code+Mysql DB
💻 PHP
📖 第 1 页 / 共 2 页
字号:
<?php//// +----------------------------------------------------------------------+// | PHP Version 5                                                        |// +----------------------------------------------------------------------+// | Copyright (c) 1997-2004 The PHP Group                                |// +----------------------------------------------------------------------+// | This source file is subject to version 3.0 of the PHP license,       |// | that is bundled with this package in the file LICENSE, and is        |// | available through the world-wide-web at the following url:           |// | http://www.php.net/license/3_0.txt.                                  |// | If you did not receive a copy of the PHP license and are unable to   |// | obtain it through the world-wide-web, please send a note to          |// | license@php.net so we can mail you a copy immediately.               |// +----------------------------------------------------------------------+// | Author: Gregory Beaver <cellog@php.net>                              |// |                                                                      |// +----------------------------------------------------------------------+//// $Id: ErrorStack.php,v 1.2 2004/03/21 23:00:54 cellog Exp $/** * Error Stack Implementation *  * This is an incredibly simple implementation of a very complex error handling * facility.  It contains the ability * to track multiple errors from multiple packages simultaneously.  In addition, * it can track errors of many levels, save data along with the error, context * information such as the exact file, line number, class and function that * generated the error, and if necessary, it can raise a traditional PEAR_Error. * It has built-in support for PEAR::Log, to log errors as they occur *  * Since version 0.2alpha, it is also possible to selectively ignore errors, * through the use of an error callback, see {@link pushCallback()} *  * Since version 0.3alpha, it is possible to specify the exception class * returned from {@link push()} * @author Greg Beaver <cellog@php.net> * @version 0.6alpha * @package PEAR_ErrorStack * @category Debugging * @license http://www.php.net/license/3_0.txt PHP License v3.0 *//** * Singleton storage *  * Format: * <pre> * array( *  'package1' => PEAR_ErrorStack object, *  'package2' => PEAR_ErrorStack object, *  ... * ) * </pre> * @access private * @global array $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'] */$GLOBALS['_PEAR_ERRORSTACK_SINGLETON'] = array();/** * Global error callback (default) *  * This is only used  * @see PEAR_ErrorStack::setDefaultCallback() * @access private * @global array $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_CALLBACK'] */$GLOBALS['_PEAR_ERRORSTACK_DEFAULT_CALLBACK'] = false;/** * Global Log object (default) *  * This is only used  * @see PEAR_ErrorStack::setDefaultLogger() * @access private * @global array $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER'] */$GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER'] = false;/**#@+ * One of four possible return values from the error Callback * @see PEAR_ErrorStack::_errorCallback() *//** * If this is returned, then the error will be both pushed onto the stack * and logged. */define('PEAR_ERRORSTACK_PUSHANDLOG', 1);/** * If this is returned, then the error will only be pushed onto the stack, * and not logged. */define('PEAR_ERRORSTACK_PUSH', 2);/** * If this is returned, then the error will only be logged, but not pushed * onto the error stack. */define('PEAR_ERRORSTACK_LOG', 3);/** * If this is returned, then the error is completely ignored. */define('PEAR_ERRORSTACK_IGNORE', 4);/**#@-*//** * Error code for an attempt to instantiate a non-class as a PEAR_ErrorStack in * the singleton method. */define('PEAR_ERRORSTACK_ERR_NONCLASS', 1);/** * Error code for an attempt to pass an object into {@link PEAR_ErrorStack::getMessage()} * that has no __toString() method */define('PEAR_ERRORSTACK_ERR_OBJTOSTRING', 2);/** * Error Stack Implementation * * Usage: * <code> * // global error stack * $global_stack = &PEAR_ErrorStack::singleton('MyPackage'); * // local error stack * $local_stack = new PEAR_ErrorStack('MyPackage'); * </code> * @copyright 2004 Gregory Beaver * @package PEAR_ErrorStack * @license http://www.php.net/license/3_0.txt PHP License */class PEAR_ErrorStack {    /**     * Errors are stored in the order that they are pushed on the stack.     * @since 0.4alpha Errors are no longer organized by error level.     * This renders pop() nearly unusable, and levels could be more easily     * handled in a callback anyway     * @var array     * @access private     */    var $_errors = array();        /**     * Package name this error stack represents     * @var string     * @access protected     */    var $_package;        /**     * Determines whether a PEAR_Error is thrown upon every error addition     * @var boolean     * @access private     */    var $_compat = false;        /**     * If set to a valid callback, this will be used to generate the error     * message from the error code, otherwise the message passed in will be     * used     * @var false|string|array     * @access private     */    var $_msgCallback = false;        /**     * If set to a valid callback, this will be used to generate the error     * context for an error.  For PHP-related errors, this will be a file     * and line number as retrieved from debug_backtrace(), but can be     * customized for other purposes.  The error might actually be in a separate     * configuration file, or in a database query.     * @var false|string|array     * @access protected     */    var $_contextCallback = false;        /**     * If set to a valid callback, this will be called every time an error     * is pushed onto the stack.  The return value will be used to determine     * whether to allow an error to be pushed or logged.     *      * The return value must be one an PEAR_ERRORSTACK_* constant     * @see PEAR_ERRORSTACK_PUSHANDLOG, PEAR_ERRORSTACK_PUSH, PEAR_ERRORSTACK_LOG     * @var false|string|array     * @access protected     */    var $_errorCallback = array();        /**     * PEAR::Log object for logging errors     * @var false|Log     * @access protected     */    var $_logger = false;        /**     * Class name to use for a PHP 5 exception that will be returned     * @var string     * @access protected     */    var $_exceptionClass = 'Exception';        /**     * Error messages - designed to be overridden     * @var array     * @abstract     */    var $_errorMsgs = array();        /**     * Set up a new error stack     *      * @param string   $package name of the package this error stack represents     * @param callback $msgCallback callback used for error message generation     * @param callback $contextCallback callback used for context generation,     *                 defaults to {@link getFileLine()}     * @param boolean  $throwPEAR_Error     * @param string   $exceptionClass exception class to instantiate if     *                 in PHP 5     */    function PEAR_ErrorStack($package, $msgCallback = false, $contextCallback = false,                         $throwPEAR_Error = false, $exceptionClass = null)    {        $this->_package = $package;        $this->setMessageCallback($msgCallback);        $this->setContextCallback($contextCallback);        $this->_compat = $throwPEAR_Error;        // this allows child classes to simply redefine $this->_exceptionClass        if (!is_null($exceptionClass)) {            $this->_exceptionClass = $exceptionClass;        }    }        /**     * Return a single error stack for this package.     *      * Note that all parameters are ignored if the stack for package $package     * has already been instantiated     * @param string   $package name of the package this error stack represents     * @param callback $msgCallback callback used for error message generation     * @param callback $contextCallback callback used for context generation,     *                 defaults to {@link getFileLine()}     * @param boolean  $throwPEAR_Error     * @param string   $exceptionClass exception class to instantiate if     *                 in PHP 5     * @param string   $stackClass class to instantiate     * @static     * @return PEAR_ErrorStack     */    function &singleton($package, $msgCallback = false, $contextCallback = false,                         $throwPEAR_Error = false, $exceptionClass = null,                         $stackClass = 'PEAR_ErrorStack')    {        if (isset($GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package])) {            return $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package];        }        if (!class_exists($stackClass)) {            $trace = debug_backtrace();            PEAR_ErrorStack::staticPush('PEAR_ErrorStack', PEAR_ERRORSTACK_ERR_NONCLASS,                'exception', array('stackclass' => $stackClass),                'stack class "%stackclass%" is not a valid class name (should be like PEAR_ErrorStack)',                false, $trace);        }        return $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package] =            &new $stackClass($package, $msgCallback, $contextCallback, $throwPEAR_Error,                             $exceptionClass);    }    /**     * Internal error handler for PEAR_ErrorStack class     *      * Dies if the error is an exception (and would have died anyway)     * @access private     */    function _handleError($err)    {        if ($err['level'] == 'exception') {            $message = $err['message'];            if (isset($_SERVER['REQUEST_URI'])) {                echo '<br />';            } else {                echo "\n";            }            var_dump($err['context']);            die($message);        }    }        /**     * Set up a PEAR::Log object for all error stacks that don't have one     * @param Log $log      * @static     */    function setDefaultLogger(&$log)    {        $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER'] = &$log;    }        /**     * Set up a PEAR::Log object for this error stack     * @param Log $log      */    function setLogger(&$log)    {        $this->_logger = &$log;    }        /**     * Set an error code => error message mapping callback     *      * This method sets the callback that can be used to generate error     * messages for any instance     * @param array|string Callback function/method     */    function setMessageCallback($msgCallback)    {        if (!$msgCallback) {            $this->_msgCallback = array(&$this, 'getErrorMessage');        } else {            if (is_callable($msgCallback)) {                $this->_msgCallback = $msgCallback;            }        }    }        /**     * Get an error code => error message mapping callback     *      * This method returns the current callback that can be used to generate error     * messages     * @return array|string|false Callback function/method or false if none     */    function getMessageCallback()    {        return $this->_msgCallback;    }        /**     * Sets a default callback to be used by all error stacks     *      * This method sets the callback that can be used to generate error     * messages for a singleton     * @param array|string Callback function/method     * @static     */    function setDefaultCallback($callback = false)    {        if (!is_callable($callback)) {            $callback = false;        }        $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_CALLBACK'] = $callback;    }        /**     * Set an error code => error message mapping callback     *      * This method sets the callback that can be used to generate error     * messages for any PEAR_ErrorStack instance     * @param array|string Callback function/method     */    function setContextCallback($contextCallback)    {        if (!$contextCallback) {            $this->_contextCallback = array(&$this, 'getFileLine');        } else {            if (is_callable($contextCallback)) {                $this->_contextCallback = $contextCallback;            }        }    }        /**     * Set an error Callback     * If set to a valid callback, this will be called every time an error     * is pushed onto the stack.  The return value will be used to determine     * whether to allow an error to be pushed or logged.     *      * The return value must be one of the ERRORSTACK_* constants.     *      * This functionality can be used to emulate PEAR's pushErrorHandling, and     * the PEAR_ERROR_CALLBACK mode, without affecting the integrity of     * the error stack or logging     * @see PEAR_ERRORSTACK_PUSHANDLOG, PEAR_ERRORSTACK_PUSH, PEAR_ERRORSTACK_LOG     * @see popCallback()     * @param string|array $cb     */    function pushCallback($cb)    {        array_push($this->_errorCallback, $cb);    }        /**     * Remove a callback from the error callback stack     * @see pushCallback()     * @return array|string|false     */    function popCallback()    {        if (!count($this->_errorCallback)) {            return false;        }        return array_pop($this->_errorCallback);    }        /**     * Set an error Callback for every package error stack     * @see PEAR_ERRORSTACK_PUSHANDLOG, PEAR_ERRORSTACK_PUSH, PEAR_ERRORSTACK_LOG     * @see staticPopCallback(), pushCallback()     * @param string|array $cb     * @static     */    function staticPushCallback($cb)    {        foreach($GLOBALS['_PEAR_ERRORSTACK_SINGLETON'] as $package => $unused) {            $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package]->pushCallback($cb);        }    }        /**     * Remove a callback from every error callback stack     * @see staticPushCallback()     * @return array|string|false     * @static     */    function staticPopCallback()    {        foreach($GLOBALS['_PEAR_ERRORSTACK_SINGLETON'] as $package => $unused) {            $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package]->popCallback();        }    }        /**     * Add an error to the stack     *      * If the message generator exists, it is called with 2 parameters.     *  - the current Error Stack object     *  - an array that is in the same format as an error.  Available indices     *    are 'code', 'package', 'time', 'params', 'level', and 'context'     *      * Next, if the error should contain context information, this is     * handled by the context grabbing method.     * Finally, the error is pushed onto the proper error stack     * @param int    $code      Package-specific error code     * @param string $level     Error level.  This is NOT spell-checked     * @param array  $params    associative array of error parameters     * @param string $msg       Error message, or a portion of it if the message     *                          is to be generated

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -