ignore */ return false; $msg = "[$errno] $errstr ($errfile at $errline)"; // Display messages only once. foreach ($ffErrors as $m) { if ($m['message'] == $msg) return true; } switch ($errno) { case E_USER_ERROR: case E_ERROR: $type = 'error'; break; case E_USER_WARNING: case E_WARNING: $type = 'warning'; break; case E_USER_NOTICE: case E_NOTICE: $type = 'notice'; break; case E_STRICT: case E_USER_DEPRECATED: case E_DEPRECATED: $type = "strict"; break; default: $type = 'unknown'; break; } if (forge_get_config('sysdebug_backtraces')) $msg .= "\n" . '
' . htmlentities(debug_string_backtrace()) . ""; $ffErrors[] = array('type' => $type, 'message' => $msg); /* Don't execute PHP internal error handler */ return true; } function ffOutputHandler($buffer) { global $ffErrors, $sysdebug_enable, $sysdebug__aborted, $sysdebug_lazymode_on, $sysdebug_doframe, $gfcommon, $sysDTDs, $sysXMLNSs, $HTML; if ($sysdebug__aborted) { /* called from exception handler, discard */ $p = strrpos($buffer, "\r\n"); return (($p === false) ? "" : substr($buffer, $p + 2)); } if (!getenv('SERVER_SOFTWARE')) { return $buffer; } /* in case we’re aborted */ if (!$sysdebug_enable) return $buffer; /* if content-type != text/html* assume abortion */ if ($sysdebug_lazymode_on) { $thdr = 'content-type:'; $tstr = 'content-type: text/html'; foreach (headers_list() as $h) { if (strncasecmp($h, $thdr, strlen($thdr))) continue; if (strncasecmp($h, $tstr, strlen($tstr))) /* application/something, maybe */ return $buffer; } } /* stop calling ffErrorHandler */ restore_error_handler(); $dtdpath = $gfcommon . 'include/'; // this is, sadly, necessary (especially in ff-plugin-mediawiki) $pre_tag = "
"; $divstring = "\n\n" . '\n\n" . 'Click to toggle' . "\n"; $doctype = util_ifsetor($HTML->doctype); if (!$doctype) { $doctype = 'transitional'; } if ($sysdebug_doframe) { $initial = '' . $sysDTDs[$doctype]['doctype'] . 'AJAX frame \n"; $bufferstrip = strlen($initial); $buffer = $initial . $buffer . ''; } /* cut off