32 public $_showErrors =
false;
40 public $_isFatal =
false;
51 set_error_handler(
'XoopsErrorHandler_HandleError');
52 register_shutdown_function(
'XoopsErrorHandler_Shutdown');
62 static $instance =
null;
63 if (empty($instance)) {
78 $this->_showErrors = $showErrors;
90 if (E_USER_ERROR == $error[
'errno']) {
91 $this->_isFatal =
true;
92 exit($error[
'errstr']);
94 if (($error[
'errno'] & error_reporting()) !== $error[
'errno']) {
97 $this->_errors[] = $error;
125 if ($this->_isFatal) {
126 $output .=
'This page cannot be displayed due to an internal error.<br><br>';
127 $output .=
'If you are the administrator of this site, please visit the <a href="https://github.com/xoopscube/">XOOPSCube Project Site</a> for assistance.<br><br>';
129 if (!$this->_showErrors || empty($this->_errors)) {
134 foreach ($this->_errors as $error) {
135 switch ($error[
'errno']) {
137 $out =
'Notice [Xoops]: ';
140 $out =
'Warning [Xoops]: ';
143 $out =
'Error [Xoops]: ';
145 case E_USER_DEPRECATED:
146 $out =
'Deprecated [Xoops]: ';
149 $out =
'Notice [PHP]: ';
152 $out =
'Warning [PHP]: ';
155 $out =
'Deprecated [PHP]: ';
158 $out =
'Strict [PHP]: ';
161 $out =
'Fatal [PHP]: ';
164 $out =
'Unknown Condition [' . $error[
'errno'] .
']: ';
169 $out .= sprintf(
'%s in file %s line %s', $error[
'errstr'], $error[
'errfile'], $error[
'errline']);
172 if (isset($output[$md5])) {
174 $output[$md5] = preg_replace(
'/\(\d+\)$/',
'(' . ++$count[$md5] .
')', $output[$md5]);
176 $output[$md5] = $out .
' (1)';
180 $ret =
'<div class="alert error">';
181 $ret .= implode(
"<br>\n", $output);
201function XoopsErrorHandler_HandleError($errNo, $errStr, $errFile, $errLine)
207 'errfile' => str_replace([XOOPS_ROOT_PATH, XOOPS_TRUST_PATH], [
'(html)',
'(trust)'], $errFile),
208 'errline' => $errLine
211 $error_handler->handleError($new_error);
220function XoopsErrorHandler_Shutdown()
222 $error = error_get_last();
223 if (E_ERROR === $error[
'type']) {
224 XoopsErrorHandler_HandleError($error[
'type'], $error[
'message'], $error[
'file'], $error[
'line']);
227 echo $error_handler->renderErrors();
activate($showErrors=false)