/** * @param PEAR_Error $error */ public function __construct(PEAR_Error $error) { $message = $error->getMessage(); $userInfo = $error->getUserInfo(); if (!is_null($userInfo)) { $message .= ', ' . $userInfo; } parent::__construct($message); $backtrace = $error->getBacktrace(); if (is_array($backtrace)) { $this->file = $backtrace[1]['file']; $this->line = $backtrace[1]['line']; } }
/** * Return a trace for the PEAR error. * * @param PEAR_Error $error The PEAR error. * * @return string The backtrace as a string. */ private function _getPearTrace(PEAR_Error $error) { $pear_error = ''; $backtrace = $error->getBacktrace(); if (!empty($backtrace)) { $pear_error .= 'PEAR backtrace:' . "\n\n"; foreach ($backtrace as $frame) { $pear_error .= (isset($frame['class']) ? $frame['class'] : '') . (isset($frame['type']) ? $frame['type'] : '') . (isset($frame['function']) ? $frame['function'] : 'unkown') . ' ' . (isset($frame['file']) ? $frame['file'] : 'unkown') . ':' . (isset($frame['line']) ? $frame['line'] : 'unkown') . "\n"; } } $userinfo = $error->getUserInfo(); if (!empty($userinfo)) { $pear_error .= "\n" . 'PEAR user info:' . "\n\n"; if (is_string($userinfo)) { $pear_error .= $userinfo; } else { $pear_error .= print_r($userinfo, true); } } return $pear_error; }
/** * Callback called when PEAR throws an error * * @param PEAR_Error $error */ function pear_handle_error($error) { echo '<strong>' . $error->GetMessage() . '</strong> ' . $error->getUserInfo(); echo '<br /> <strong>Backtrace </strong>:'; print_object($error->backtrace); }
/** * Adds a PEAR error to the stack for the package. * * @param PEAR_Error $error * @param integer $code * @param string $message * @param string $level * @param array $params * @param array $backtrace */ function pushPEARError($error, $code, $message = false, $level = 'exception', $params = array(), $backtrace = false) { $time = explode(' ', microtime()); $time = $time[1] + $time[0]; if (!$backtrace) { $backtrace = debug_backtrace(); } Piece_Unity_Error::push($code, $message, 'exception', $params, array('code' => $error->getCode(), 'message' => $error->getMessage(), 'params' => array('userinfo' => $error->getUserInfo(), 'debuginfo' => $error->getDebugInfo()), 'package' => 'PEAR', 'level' => 'exception', 'time' => $time), $backtrace); }
/** * PEAR error handler * * @param object $error PEAR Error object * * @return void * @ignore */ public static function onPearError(PEAR_Error $error) { $trace = debug_backtrace(); array_shift($trace); array_shift($trace); array_shift($trace); $options['file'] = $trace[0]['file']; $options['line'] = $trace[0]['line']; $options['trace'] = $trace; $options['package'] = self::PACKAGE_PEAR; $debugInfo = $error->getDebugInfo(); $userInfo = $error->getUserInfo(); $trace = $error->getBackTrace(); $info = array('Error Type' => $error->getType(), 'Debug Info' => $error->getUserInfo()); if ($debugInfo !== $userInfo) { $info['User Info'] = $userInfo; } if (self::$_config[self::CONFIG_DEBUG] === true) { self::error('PEAR Error', $error->getCode() . ' ' . $error->getMessage(), $info, $options); } else { error_log('PEAR Error' . $error->getCode() . ' ' . $error->getMessage() . " in file[{$options['file']}] on line [{$options['line']}", 0); } }
/** * Returns the detailled error message of an PEAR_Error or an Exception * * @param PEAR_Error|Exception $error Error object * * @return string Detailled error message */ function get_detail_error_msg($error) { if ($error instanceof Exception) { $msg = $error->__toString(); } else { if ($error instanceof PEAR_Error) { $msg = $error->getMessage() . '... ' . $error->getUserInfo(); } else { $msg = (string) $error; } } return $msg; }
/** * エラー処理用をおこなう * * PEAR_Error のインスタンス作成時に呼ばれるコールバック関数 * * @static * @param PEAR_Error $error */ function errorHandler($error) { if (OPENPNE_DB_ERROR_LOG) { require_once 'Log.php'; $msg = sprintf("msg:-> %s\t info:-> %s", $error->getMessage(), $error->getUserInfo()); $log = OPENPNE_VAR_DIR . '/log/db_errors.log'; $file =& Log::singleton('file', $log, 'db', null, PEAR_LOG_ERR); $file->log($msg, PEAR_LOG_ERR); } }
function PEAR_ErrorToPEAR_Exception(PEAR_Error $err) { //DB_DataObject throws error when an empty set would be returned //That behavior is weird, and not how the rest of StatusNet works. //So just ignore those errors. if ($err->getCode() == DB_DATAOBJECT_ERROR_NODATA) { return; } $msg = $err->getMessage(); $userInfo = $err->getUserInfo(); // Log this; push the message up as an exception common_log(LOG_ERR, "PEAR Error: {$msg} ({$userInfo})"); // HACK: queue handlers get kicked by the long-query killer, and // keep the same broken connection. We die here to get a new // process started. if (php_sapi_name() == 'cli' && preg_match('/nativecode=2006/', $userInfo)) { common_log(LOG_ERR, "Lost DB connection; dying."); exit(100); } if ($err->getCode()) { throw new PEAR_Exception($err->getMessage(), $err->getCode()); } throw new PEAR_Exception($err->getMessage()); }