pear.php

来自「php5.0原代码」· PHP 代码 · 共 976 行 · 第 1/2 页

PHP
976
字号
     * @since PHP 4.0.5     */    function raiseError($message = null,                         $code = null,                         $mode = null,                         $options = null,                         $userinfo = null,                         $error_class = null,                         $skipmsg = false)    {        // The error is yet a PEAR error object        if (is_object($message)) {            $code        = $message->getCode();            $userinfo    = $message->getUserInfo();            $error_class = $message->getType();            $message->error_message_prefix = '';            $message     = $message->getMessage();        }        if (isset($this) && isset($this->_expected_errors) && sizeof($this->_expected_errors) > 0 && sizeof($exp = end($this->_expected_errors))) {            if ($exp[0] == "*" ||                (is_int(reset($exp)) && in_array($code, $exp)) ||                (is_string(reset($exp)) && in_array($message, $exp))) {                $mode = PEAR_ERROR_RETURN;            }        }        // No mode given, try global ones        if ($mode === null) {            // Class error handler            if (isset($this) && isset($this->_default_error_mode)) {                $mode    = $this->_default_error_mode;                $options = $this->_default_error_options;            // Global error handler            } elseif (isset($GLOBALS['_PEAR_default_error_mode'])) {                $mode    = $GLOBALS['_PEAR_default_error_mode'];                $options = $GLOBALS['_PEAR_default_error_options'];            }        }        if ($error_class !== null) {            $ec = $error_class;        } elseif (isset($this) && isset($this->_error_class)) {            $ec = $this->_error_class;        } else {            $ec = 'PEAR_Error';        }        if ($skipmsg) {            return new $ec($code, $mode, $options, $userinfo);        } else {            return new $ec($message, $code, $mode, $options, $userinfo);        }    }    // }}}    // {{{ throwError()    /**     * Simpler form of raiseError with fewer options.  In most cases     * message, code and userinfo are enough.     *     * @param string $message     *     */    function throwError($message = null,                         $code = null,                         $userinfo = null)    {        if (isset($this) && is_a($this, 'PEAR')) {            return $this->raiseError($message, $code, null, null, $userinfo);        } else {            return PEAR::raiseError($message, $code, null, null, $userinfo);        }    }    // }}}    // {{{ pushErrorHandling()    /**     * Push a new error handler on top of the error handler options stack. With this     * you can easily override the actual error handler for some code and restore     * it later with popErrorHandling.     *     * @param mixed $mode (same as setErrorHandling)     * @param mixed $options (same as setErrorHandling)     *     * @return bool Always true     *     * @see PEAR::setErrorHandling     */    function pushErrorHandling($mode, $options = null)    {        $stack = &$GLOBALS['_PEAR_error_handler_stack'];        if (isset($this) && is_a($this, 'PEAR')) {            $def_mode    = &$this->_default_error_mode;            $def_options = &$this->_default_error_options;        } else {            $def_mode    = &$GLOBALS['_PEAR_default_error_mode'];            $def_options = &$GLOBALS['_PEAR_default_error_options'];        }        $stack[] = array($def_mode, $def_options);        if (isset($this) && is_a($this, 'PEAR')) {            $this->setErrorHandling($mode, $options);        } else {            PEAR::setErrorHandling($mode, $options);        }        $stack[] = array($mode, $options);        return true;    }    // }}}    // {{{ popErrorHandling()    /**    * Pop the last error handler used    *    * @return bool Always true    *    * @see PEAR::pushErrorHandling    */    function popErrorHandling()    {        $stack = &$GLOBALS['_PEAR_error_handler_stack'];        array_pop($stack);        list($mode, $options) = $stack[sizeof($stack) - 1];        array_pop($stack);        if (isset($this) && is_a($this, 'PEAR')) {            $this->setErrorHandling($mode, $options);        } else {            PEAR::setErrorHandling($mode, $options);        }        return true;    }    // }}}    // {{{ loadExtension()    /**    * OS independant PHP extension load. Remember to take care    * on the correct extension name for case sensitive OSes.    *    * @param string $ext The extension name    * @return bool Success or not on the dl() call    */    function loadExtension($ext)    {        if (!extension_loaded($ext)) {            // if either returns true dl() will produce a FATAL error, stop that            if ((ini_get('enable_dl') != 1) || (ini_get('safe_mode') == 1)) {                return false;            }            if (OS_WINDOWS) {                $suffix = '.dll';            } elseif (PHP_OS == 'HP-UX') {                $suffix = '.sl';            } elseif (PHP_OS == 'AIX') {                $suffix = '.a';            } elseif (PHP_OS == 'OSX') {                $suffix = '.bundle';            } else {                $suffix = '.so';            }            return @dl('php_'.$ext.$suffix) || @dl($ext.$suffix);        }        return true;    }    // }}}}// {{{ _PEAR_call_destructors()function _PEAR_call_destructors(){    global $_PEAR_destructor_object_list;    if (is_array($_PEAR_destructor_object_list) &&        sizeof($_PEAR_destructor_object_list))    {        reset($_PEAR_destructor_object_list);        while (list($k, $objref) = each($_PEAR_destructor_object_list)) {            $classname = get_class($objref);            while ($classname) {                $destructor = "_$classname";                if (method_exists($objref, $destructor)) {                    $objref->$destructor();                    break;                } else {                    $classname = get_parent_class($classname);                }            }        }        // Empty the object list to ensure that destructors are        // not called more than once.        $_PEAR_destructor_object_list = array();    }    // Now call the shutdown functions    if (is_array($GLOBALS['_PEAR_shutdown_funcs']) AND !empty($GLOBALS['_PEAR_shutdown_funcs'])) {        foreach ($GLOBALS['_PEAR_shutdown_funcs'] as $value) {            call_user_func_array($value[0], $value[1]);        }    }}// }}}class PEAR_Error{    // {{{ properties    var $error_message_prefix = '';    var $mode                 = PEAR_ERROR_RETURN;    var $level                = E_USER_NOTICE;    var $code                 = -1;    var $message              = '';    var $userinfo             = '';    var $backtrace            = null;    // }}}    // {{{ constructor    /**     * PEAR_Error constructor     *     * @param string $message  message     *     * @param int $code     (optional) error code     *     * @param int $mode     (optional) error mode, one of: PEAR_ERROR_RETURN,     * PEAR_ERROR_PRINT, PEAR_ERROR_DIE, PEAR_ERROR_TRIGGER,     * PEAR_ERROR_CALLBACK or PEAR_ERROR_EXCEPTION     *     * @param mixed $options   (optional) error level, _OR_ in the case of     * PEAR_ERROR_CALLBACK, the callback function or object/method     * tuple.     *     * @param string $userinfo (optional) additional user/debug info     *     * @access public     *     */    function PEAR_Error($message = 'unknown error', $code = null,                        $mode = null, $options = null, $userinfo = null)    {        if ($mode === null) {            $mode = PEAR_ERROR_RETURN;        }        $this->message   = $message;        $this->code      = $code;        $this->mode      = $mode;        $this->userinfo  = $userinfo;        if (function_exists("debug_backtrace")) {            $this->backtrace = debug_backtrace();        }        if ($mode & PEAR_ERROR_CALLBACK) {            $this->level = E_USER_NOTICE;            $this->callback = $options;        } else {            if ($options === null) {                $options = E_USER_NOTICE;            }            $this->level = $options;            $this->callback = null;        }        if ($this->mode & PEAR_ERROR_PRINT) {            if (is_null($options) || is_int($options)) {                $format = "%s";            } else {                $format = $options;            }            printf($format, $this->getMessage());        }        if ($this->mode & PEAR_ERROR_TRIGGER) {            trigger_error($this->getMessage(), $this->level);        }        if ($this->mode & PEAR_ERROR_DIE) {            $msg = $this->getMessage();            if (is_null($options) || is_int($options)) {                $format = "%s";                if (substr($msg, -1) != "\n") {                    $msg .= "\n";                }            } else {                $format = $options;            }            die(sprintf($format, $msg));        }        if ($this->mode & PEAR_ERROR_CALLBACK) {            if (is_callable($this->callback)) {                call_user_func($this->callback, $this);            }        }        if ($this->mode & PEAR_ERROR_EXCEPTION) {            trigger_error("PEAR_ERROR_EXCEPTION is obsolete, use class PEAR_ErrorStack for exceptions", E_USER_WARNING);            eval('$e = new Exception($this->message, $this->code);$e->PEAR_Error = $this;throw($e);');        }    }    // }}}    // {{{ getMode()    /**     * Get the error mode from an error object.     *     * @return int error mode     * @access public     */    function getMode() {        return $this->mode;    }    // }}}    // {{{ getCallback()    /**     * Get the callback function/method from an error object.     *     * @return mixed callback function or object/method array     * @access public     */    function getCallback() {        return $this->callback;    }    // }}}    // {{{ getMessage()    /**     * Get the error message from an error object.     *     * @return  string  full error message     * @access public     */    function getMessage()    {        return ($this->error_message_prefix . $this->message);    }    // }}}    // {{{ getCode()    /**     * Get error code from an error object     *     * @return int error code     * @access public     */     function getCode()     {        return $this->code;     }    // }}}    // {{{ getType()    /**     * Get the name of this error/exception.     *     * @return string error/exception name (type)     * @access public     */    function getType()    {        return get_class($this);    }    // }}}    // {{{ getUserInfo()    /**     * Get additional user-supplied information.     *     * @return string user-supplied information     * @access public     */    function getUserInfo()    {        return $this->userinfo;    }    // }}}    // {{{ getDebugInfo()    /**     * Get additional debug information supplied by the application.     *     * @return string debug information     * @access public     */    function getDebugInfo()    {        return $this->getUserInfo();    }    // }}}    // {{{ getBacktrace()    /**     * Get the call backtrace from where the error was generated.     * Supported with PHP 4.3.0 or newer.     *     * @param int $frame (optional) what frame to fetch     * @return array Backtrace, or NULL if not available.     * @access public     */    function getBacktrace($frame = null)    {        if ($frame === null) {            return $this->backtrace;        }        return $this->backtrace[$frame];    }    // }}}    // {{{ addUserInfo()    function addUserInfo($info)    {        if (empty($this->userinfo)) {            $this->userinfo = $info;        } else {            $this->userinfo .= " ** $info";        }    }    // }}}    // {{{ toString()    /**     * Make a string representation of this object.     *     * @return string a string with an object summary     * @access public     */    function toString() {        $modes = array();        $levels = array(E_USER_NOTICE  => 'notice',                        E_USER_WARNING => 'warning',                        E_USER_ERROR   => 'error');        if ($this->mode & PEAR_ERROR_CALLBACK) {            if (is_array($this->callback)) {                $callback = get_class($this->callback[0]) . '::' .                    $this->callback[1];            } else {                $callback = $this->callback;            }            return sprintf('[%s: message="%s" code=%d mode=callback '.                           'callback=%s prefix="%s" info="%s"]',                           get_class($this), $this->message, $this->code,                           $callback, $this->error_message_prefix,                           $this->userinfo);        }        if ($this->mode & PEAR_ERROR_PRINT) {            $modes[] = 'print';        }        if ($this->mode & PEAR_ERROR_TRIGGER) {            $modes[] = 'trigger';        }        if ($this->mode & PEAR_ERROR_DIE) {            $modes[] = 'die';        }        if ($this->mode & PEAR_ERROR_RETURN) {            $modes[] = 'return';        }        return sprintf('[%s: message="%s" code=%d mode=%s level=%s '.                       'prefix="%s" info="%s"]',                       get_class($this), $this->message, $this->code,                       implode("|", $modes), $levels[$this->level],                       $this->error_message_prefix,                       $this->userinfo);    }    // }}}}register_shutdown_function("_PEAR_call_destructors");/* * Local Variables: * mode: php * tab-width: 4 * c-basic-offset: 4 * End: */?>

⌨️ 快捷键说明

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