31 define(
'PEAR_ERROR_RETURN', 1);
32 define(
'PEAR_ERROR_PRINT', 2);
33 define(
'PEAR_ERROR_TRIGGER', 4);
34 define(
'PEAR_ERROR_DIE', 8);
35 define(
'PEAR_ERROR_CALLBACK', 16);
40 define(
'PEAR_ERROR_EXCEPTION', 32);
42 define(
'PEAR_ZE2', (function_exists(
'version_compare') &&
43 version_compare(zend_version(),
"2-dev",
"ge")));
45 if (substr(PHP_OS, 0, 3) ==
'WIN') {
46 define(
'OS_WINDOWS',
true);
47 define(
'OS_UNIX',
false);
48 define(
'PEAR_OS',
'Windows');
50 define(
'OS_WINDOWS',
false);
51 define(
'OS_UNIX',
true);
52 define(
'PEAR_OS',
'Unix');
56 if (!defined(
'PATH_SEPARATOR')) {
58 define(
'PATH_SEPARATOR',
';');
60 define(
'PATH_SEPARATOR',
':');
65 $GLOBALS[
'_PEAR_default_error_options'] = E_USER_NOTICE;
66 $GLOBALS[
'_PEAR_destructor_object_list'] = array();
68 $GLOBALS[
'_PEAR_error_handler_stack'] = array();
70 @ini_set(
'track_errors',
true);
170 function PEAR($error_class = null)
172 $classname = strtolower(get_class($this));
174 print
"PEAR constructor called, class=$classname\n";
176 if ($error_class !== null) {
177 $this->_error_class = $error_class;
179 while ($classname && strcasecmp($classname,
"pear")) {
180 $destructor =
"_$classname";
181 if (method_exists($this, $destructor)) {
182 global $_PEAR_destructor_object_list;
183 $_PEAR_destructor_object_list[] = &$this;
184 if (!isset(
$GLOBALS[
'_PEAR_SHUTDOWN_REGISTERED'])) {
185 register_shutdown_function(
"_PEAR_call_destructors");
186 $GLOBALS[
'_PEAR_SHUTDOWN_REGISTERED'] =
true;
190 $classname = get_parent_class($classname);
211 printf(
"PEAR destructor called, class=%s\n", strtolower(get_class($this)));
233 if (!isset($properties[$class])) {
234 $properties[$class] = array();
236 if (!array_key_exists($var, $properties[$class])) {
237 $properties[$class][$var] = null;
239 return $properties[$class][$var];
258 if (!isset(
$GLOBALS[
'_PEAR_SHUTDOWN_REGISTERED'])) {
259 register_shutdown_function(
"_PEAR_call_destructors");
260 $GLOBALS[
'_PEAR_SHUTDOWN_REGISTERED'] =
true;
262 $GLOBALS[
'_PEAR_shutdown_funcs'][] = array($func, $args);
281 if (is_a(
$data,
'PEAR_Error')) {
282 if (is_null($code)) {
284 } elseif (is_string($code)) {
285 return $data->getMessage() == $code;
287 return $data->getCode() == $code;
337 if (isset($this) && is_a($this,
'PEAR')) {
341 $setmode = &
$GLOBALS[
'_PEAR_default_error_mode'];
342 $setoptions = &
$GLOBALS[
'_PEAR_default_error_options'];
362 trigger_error(
"invalid error callback", E_USER_WARNING);
367 trigger_error(
"invalid error mode", E_USER_WARNING);
392 if (is_array($code)) {
393 array_push($this->_expected_errors, $code);
395 array_push($this->_expected_errors, array($code));
411 return array_pop($this->_expected_errors);
429 foreach ($this->_expected_errors AS $key => $error_array) {
430 if (in_array($error_code, $error_array)) {
431 unset($this->_expected_errors[$key][array_search($error_code, $error_array)]);
436 if (0 == count($this->_expected_errors[$key])) {
437 unset($this->_expected_errors[$key]);
459 if ((is_array($error_code) && (0 != count($error_code)))) {
463 foreach($error_code as $key => $error) {
470 return $deleted ? true :
PEAR::raiseError(
"The expected error you submitted does not exist");
471 } elseif (!empty($error_code)) {
533 if (is_object($message)) {
534 $code = $message->getCode();
535 $userinfo = $message->getUserInfo();
536 $error_class = $message->getType();
537 $message->error_message_prefix =
'';
538 $message = $message->getMessage();
541 if (isset($this) && isset($this->_expected_errors) &&
sizeof($this->_expected_errors) > 0 &&
sizeof($exp = end($this->_expected_errors))) {
542 if ($exp[0] ==
"*" ||
543 (is_int(reset($exp)) && in_array($code, $exp)) ||
544 (is_string(reset($exp)) && in_array($message, $exp))) {
549 if ($mode === null) {
551 if (isset($this) && isset($this->_default_error_mode)) {
555 } elseif (isset(
$GLOBALS[
'_PEAR_default_error_mode'])) {
556 $mode =
$GLOBALS[
'_PEAR_default_error_mode'];
561 if ($error_class !== null) {
563 } elseif (isset($this) && isset($this->_error_class)) {
568 if (intval(PHP_VERSION) < 5) {
570 include
'PEAR/FixPHP5PEARWarnings.php';
574 $a =
new $ec($code, $mode,
$options, $userinfo);
576 $a =
new $ec($message, $code, $mode,
$options, $userinfo);
595 if (isset($this) && is_a($this,
'PEAR')) {
596 $a = &$this->
raiseError($message, $code, null, null, $userinfo);
607 $stack = &
$GLOBALS[
'_PEAR_error_handler_stack'];
608 $def_mode = &
$GLOBALS[
'_PEAR_default_error_mode'];
609 $def_options = &
$GLOBALS[
'_PEAR_default_error_options'];
610 $stack[] = array($def_mode, $def_options);
628 trigger_error(
"invalid error callback", E_USER_WARNING);
633 trigger_error(
"invalid error mode", E_USER_WARNING);
642 $stack = &
$GLOBALS[
'_PEAR_error_handler_stack'];
643 $setmode = &
$GLOBALS[
'_PEAR_default_error_mode'];
644 $setoptions = &
$GLOBALS[
'_PEAR_default_error_options'];
646 list($mode,
$options) = $stack[
sizeof($stack) - 1];
665 trigger_error(
"invalid error callback", E_USER_WARNING);
670 trigger_error(
"invalid error mode", E_USER_WARNING);
692 $stack = &
$GLOBALS[
'_PEAR_error_handler_stack'];
693 if (isset($this) && is_a($this,
'PEAR')) {
697 $def_mode = &
$GLOBALS[
'_PEAR_default_error_mode'];
698 $def_options = &
$GLOBALS[
'_PEAR_default_error_options'];
700 $stack[] = array($def_mode, $def_options);
702 if (isset($this) && is_a($this,
'PEAR')) {
723 $stack = &
$GLOBALS[
'_PEAR_error_handler_stack'];
725 list($mode,
$options) = $stack[
sizeof($stack) - 1];
727 if (isset($this) && is_a($this,
'PEAR')) {
747 if (!extension_loaded($ext)) {
749 if ((ini_get(
'enable_dl') != 1) || (ini_get(
'safe_mode') == 1)) {
754 } elseif (PHP_OS ==
'HP-UX') {
756 } elseif (PHP_OS ==
'AIX') {
758 } elseif (PHP_OS ==
'OSX') {
763 return @dl(
'php_'.$ext.$suffix) || @dl($ext.$suffix);
775 global $_PEAR_destructor_object_list;
776 if (is_array($_PEAR_destructor_object_list) &&
777 sizeof($_PEAR_destructor_object_list))
779 reset($_PEAR_destructor_object_list);
781 $_PEAR_destructor_object_list = array_reverse($_PEAR_destructor_object_list);
783 while (list($k, $objref) = each($_PEAR_destructor_object_list)) {
784 $classname = get_class($objref);
786 $destructor =
"_$classname";
787 if (method_exists($objref, $destructor)) {
788 $objref->$destructor();
791 $classname = get_parent_class($classname);
797 $_PEAR_destructor_object_list = array();
801 if (is_array(
$GLOBALS[
'_PEAR_shutdown_funcs']) AND !empty(
$GLOBALS[
'_PEAR_shutdown_funcs'])) {
802 foreach (
$GLOBALS[
'_PEAR_shutdown_funcs'] as $value) {
803 call_user_func_array($value[0], $value[1]);
830 var $error_message_prefix =
'';
832 var $level = E_USER_NOTICE;
836 var $backtrace = null;
861 function PEAR_Error($message =
'unknown error', $code = null,
862 $mode = null,
$options = null, $userinfo = null)
864 if ($mode === null) {
867 $this->message = $message;
870 $this->userinfo = $userinfo;
872 $this->backtrace = debug_backtrace();
873 if (isset($this->backtrace[0]) && isset($this->backtrace[0][
'object'])) {
874 unset($this->backtrace[0][
'object']);
878 $this->level = E_USER_NOTICE;
885 $this->callback = null;
893 printf($format, $this->getMessage());
896 trigger_error($this->getMessage(), $this->level);
899 $msg = $this->getMessage();
902 if (substr($msg, -1) !=
"\n") {
908 die(sprintf($format, $msg));
910 if ($this->mode & PEAR_ERROR_CALLBACK) {
911 if (is_callable($this->callback)) {
912 call_user_func($this->callback, $this);
916 trigger_error(
"PEAR_ERROR_EXCEPTION is obsolete, use class PEAR_Exception for exceptions", E_USER_WARNING);
917 eval(
'$e = new Exception($this->message, $this->code);throw($e);');
944 return $this->callback;
959 return ($this->error_message_prefix . $this->message);
988 return get_class($this);
1002 return $this->userinfo;
1016 return $this->getUserInfo();
1032 if (defined(
'PEAR_IGNORE_BACKTRACE')) {
1035 if ($frame === null) {
1036 return $this->backtrace;
1038 return $this->backtrace[$frame];
1046 if (empty($this->userinfo)) {
1047 $this->userinfo = $info;
1049 $this->userinfo .=
" ** $info";
1057 return $this->getMessage();
1070 $levels = array(E_USER_NOTICE =>
'notice',
1071 E_USER_WARNING =>
'warning',
1072 E_USER_ERROR =>
'error');
1074 if (is_array($this->callback)) {
1075 $callback = (is_object($this->callback[0]) ?
1076 strtolower(get_class($this->callback[0])) :
1077 $this->callback[0]) .
'::' .
1080 $callback = $this->callback;
1082 return sprintf(
'[%s: message="%s" code=%d mode=callback '.
1083 'callback=%s prefix="%s" info="%s"]',
1084 strtolower(get_class($this)), $this->message, $this->code,
1085 $callback, $this->error_message_prefix,
1092 $modes[] =
'trigger';
1098 $modes[] =
'return';
1100 return sprintf(
'[%s: message="%s" code=%d mode=%s level=%s '.
1101 'prefix="%s" info="%s"]',
1102 strtolower(get_class($this)), $this->message, $this->code,
1103 implode(
"|", $modes), $levels[$this->level],
1104 $this->error_message_prefix,
registerShutdownFunc($func, $args=array())
Use this function to register a shutdown method for static classes.
setErrorHandling($mode=null, $options=null)
Sets how errors generated by this object should be handled.
loadExtension($ext)
OS independant PHP extension load.
const PEAR_ERROR_CALLBACK
getMode()
Get the error mode from an error object.
_checkDelExpect($error_code)
This method checks unsets an error code if available.
getMessage()
Get the error message from an error object.
getBacktrace($frame=null)
Get the call backtrace from where the error was generated.
getCallback()
Get the callback function/method from an error object.
getUserInfo()
Get additional user-supplied information.
& throwError($message=null, $code=null, $userinfo=null)
Simpler form of raiseError with fewer options.
getCode()
Get error code from an error object.
PEAR($error_class=null)
Constructor.
const PEAR_ERROR_EXCEPTION
WARNING: obsolete.
if(!is_array($argv)) $options
popErrorHandling()
Pop the last error handler used.
getDebugInfo()
Get additional debug information supplied by the application.
popExpect()
This method pops one element off the expected error codes stack.
const PEAR_ERROR_RETURN
#+ ERROR constants
getType()
Get the name of this error/exception.
expectError($code=' *')
This method is used to tell which errors you expect to get.
if(!defined('PATH_SEPARATOR')) $GLOBALS['_PEAR_default_error_mode']
delExpect($error_code)
This method deletes all occurences of the specified element from the expected error codes stack...
pushErrorHandling($mode, $options=null)
Push a new error handler on top of the error handler options stack.
_PEAR()
Destructor (the emulated type of...).
toString()
Make a string representation of this object.
& raiseError($message=null, $code=null, $mode=null, $options=null, $userinfo=null, $error_class=null, $skipmsg=false)
This method is a wrapper that returns an instance of the configured error class with this object's de...
PEAR_Error($message='unknown error', $code=null, $mode=null, $options=null, $userinfo=null)
PEAR_Error constructor.
staticPushErrorHandling($mode, $options=null)
isError($data, $code=null)
Tell whether a value is a PEAR error.
& getStaticProperty($class, $var)
If you have a class that's mostly/entirely static, and you need static properties, you can use this method to simulate them.