Zeile 116 | Zeile 116 |
---|
* @var boolean */ public $has_errors = false;
|
* @var boolean */ public $has_errors = false;
|
| /** * Display errors regardless of related settings (useful during initialization stage) * * @var boolean */ public $force_display_errors = false;
|
/** * Initializes the error handler * */ function __construct()
|
/** * Initializes the error handler * */ function __construct()
|
{
| {
|
// Lets set the error handler in here so we can just do $handler = new errorHandler() and be all set up. $error_types = E_ALL; foreach($this->ignore_types as $bit)
| // Lets set the error handler in here so we can just do $handler = new errorHandler() and be all set up. $error_types = E_ALL; foreach($this->ignore_types as $bit)
|
Zeile 130 | Zeile 137 |
---|
$error_types = $error_types & ~$bit; } error_reporting($error_types);
|
$error_types = $error_types & ~$bit; } error_reporting($error_types);
|
set_error_handler(array(&$this, "error"), $error_types);
| set_error_handler(array(&$this, "error_callback"), $error_types);
|
}
/**
|
}
/**
|
* Parses a error for processing.
| * Passes relevant arguments for error processing. * * @param string $type The error type (i.e. E_ERROR, E_FATAL) * @param string $message The error message * @param string $file The error file * @param integer $line The error line */ function error_callback($type, $message, $file=null, $line=0) { return $this->error($type, $message, $file, $line); }
/** * Processes an error.
|
* * @param string $type The error type (i.e. E_ERROR, E_FATAL) * @param string $message The error message * @param string $file The error file * @param integer $line The error line
|
* * @param string $type The error type (i.e. E_ERROR, E_FATAL) * @param string $message The error message * @param string $file The error file * @param integer $line The error line
|
| * @param boolean $allow_output Whether or not output is permitted
|
* @return boolean True if parsing was a success, otherwise assume a error */
|
* @return boolean True if parsing was a success, otherwise assume a error */
|
function error($type, $message, $file=null, $line=0)
| function error($type, $message, $file=null, $line=0, $allow_output=true)
|
{ global $mybb;
|
{ global $mybb;
|
// Error reporting turned off (either globally or by @ before erroring statement) if(error_reporting() == 0)
| // Error reporting turned off for this type if((error_reporting() & $type) == 0)
|
{ return true; }
| { return true; }
|
Zeile 163 | Zeile 184 |
---|
// For some reason in the installer this setting is set to "<" $accepted_error_types = array('both', 'error', 'warning', 'none');
|
// For some reason in the installer this setting is set to "<" $accepted_error_types = array('both', 'error', 'warning', 'none');
|
if(!in_array($mybb->settings['errortypemedium'], $accepted_error_types))
| if(isset($mybb->settings['errortypemedium']) && in_array($mybb->settings['errortypemedium'], $accepted_error_types)) { $errortypemedium = $mybb->settings['errortypemedium']; } else { $errortypemedium = "none"; }
if(isset($mybb->settings['errorlogmedium'])) { $errorlogmedium = $mybb->settings['errorlogmedium']; } else
|
{
|
{
|
$mybb->settings['errortypemedium'] = "both";
| $errorlogmedium = 'none';
|
}
if(defined("IN_TASK"))
| }
if(defined("IN_TASK"))
|
Zeile 184 | Zeile 218 |
---|
}
// Saving error to log file.
|
}
// Saving error to log file.
|
if($mybb->settings['errorlogmedium'] == "log" || $mybb->settings['errorlogmedium'] == "both")
| if($errorlogmedium == "log" || $errorlogmedium == "both")
|
{ $this->log_error($type, $message, $file, $line); }
// Are we emailing the Admin a copy?
|
{ $this->log_error($type, $message, $file, $line); }
// Are we emailing the Admin a copy?
|
if($mybb->settings['errorlogmedium'] == "mail" || $mybb->settings['errorlogmedium'] == "both")
| if($errorlogmedium == "mail" || $errorlogmedium == "both")
|
{ $this->email_error($type, $message, $file, $line); }
|
{ $this->email_error($type, $message, $file, $line); }
|
// SQL Error if($type == MYBB_SQL) { $this->output_error($type, $message, $file, $line); } else
| if($allow_output === true)
|
{
|
{
|
// Do we have a PHP error? if(my_strpos(my_strtolower($this->error_types[$type]), 'warning') === false)
| // SQL Error if($type == MYBB_SQL)
|
{ $this->output_error($type, $message, $file, $line); } // PHP Error
|
{ $this->output_error($type, $message, $file, $line); } // PHP Error
|
else
| elseif(strpos(strtolower($this->error_types[$type]), 'warning') === false) { $this->output_error($type, $message, $file, $line); } // PHP Warning elseif(in_array($errortypemedium, array('warning', 'both')))
|
{
|
{
|
if($mybb->settings['errortypemedium'] == "none" || $mybb->settings['errortypemedium'] == "error")
| global $templates;
$warning = "<strong>{$this->error_types[$type]}</strong> [$type] $message - Line: $line - File: $file PHP ".PHP_VERSION." (".PHP_OS.")<br />\n"; if(is_object($templates) && method_exists($templates, "get") && !defined("IN_ADMINCP"))
|
{
|
{
|
echo "<div class=\"php_warning\">MyBB Internal: One or more warnings occurred. Please contact your administrator for assistance.</div>";
| $this->warnings .= $warning; $this->warnings .= $this->generate_backtrace();
|
} else {
|
} else {
|
global $templates;
$warning = "<strong>{$this->error_types[$type]}</strong> [$type] $message - Line: $line - File: $file PHP ".PHP_VERSION." (".PHP_OS.")<br />\n"; if(is_object($templates) && method_exists($templates, "get") && !defined("IN_ADMINCP")) { $this->warnings .= $warning; $this->warnings .= $this->generate_backtrace(); } else { echo "<div class=\"php_warning\">{$warning}".$this->generate_backtrace()."</div>"; }
| echo "<div class=\"php_warning\">{$warning}".$this->generate_backtrace()."</div>";
|
} }
|
} }
|
}
| }
|
return true; }
| return true; }
|
Zeile 245 | Zeile 272 |
---|
global $lang, $templates;
if(empty($this->warnings))
|
global $lang, $templates;
if(empty($this->warnings))
|
{
| {
|
return false; }
// Incase a template fails and we're receiving a blank page.
|
return false; }
// Incase a template fails and we're receiving a blank page.
|
if(MANUAL_WARNINGS) {
| if(MANUAL_WARNINGS) {
|
echo $this->warnings."<br />"; }
if(!$lang->warnings) { $lang->warnings = "The following warnings occurred:";
|
echo $this->warnings."<br />"; }
if(!$lang->warnings) { $lang->warnings = "The following warnings occurred:";
|
}
| }
|
$template_exists = false;
if(!is_object($templates) || !method_exists($templates, 'get')) { if(@file_exists(MYBB_ROOT."inc/class_templates.php"))
|
$template_exists = false;
if(!is_object($templates) || !method_exists($templates, 'get')) { if(@file_exists(MYBB_ROOT."inc/class_templates.php"))
|
{
| {
|
@require_once MYBB_ROOT."inc/class_templates.php"; $templates = new templates; $template_exists = true;
|
@require_once MYBB_ROOT."inc/class_templates.php"; $templates = new templates; $template_exists = true;
|
} } else {
| } } else {
|
$template_exists = true; }
| $template_exists = true; }
|
Zeile 298 | Zeile 325 |
---|
if(!$message) {
|
if(!$message) {
|
$message = $lang->unknown_user_trigger;
| if(isset($lang->unknown_user_trigger)) { $message = $lang->unknown_user_trigger; } else { $message .= 'An unknown error has been triggered.'; }
|
}
if(in_array($type, $this->mybb_error_types))
| }
if(in_array($type, $this->mybb_error_types))
|
Zeile 308 | Zeile 342 |
---|
else { trigger_error($message, $type);
|
else { trigger_error($message, $type);
|
}
| }
|
}
/** * Logs the error in the specified error log file.
|
}
/** * Logs the error in the specified error log file.
|
* * @param string $type Warning type * @param string $message Warning message
| * * @param string $type Warning type * @param string $message Warning message
|
* @param string $file Warning file * @param integer $line Warning line */ function log_error($type, $message, $file, $line)
|
* @param string $file Warning file * @param integer $line Warning line */ function log_error($type, $message, $file, $line)
|
{ global $mybb;
| { global $mybb;
|
if($type == MYBB_SQL) { $message = "SQL Error: {$message['error_no']} - {$message['error']}\nQuery: {$message['query']}";
| if($type == MYBB_SQL) { $message = "SQL Error: {$message['error_no']} - {$message['error']}\nQuery: {$message['query']}";
|
Zeile 330 | Zeile 364 |
---|
// Do not log something that might be executable $message = str_replace('<?', '< ?', $message);
|
// Do not log something that might be executable $message = str_replace('<?', '< ?', $message);
|
| $back_trace = $this->generate_backtrace(false, 2);
if($back_trace) { $back_trace = "\t<back_trace>{$back_trace}</back_trace>\n"; }
|
$error_data = "<error>\n"; $error_data .= "\t<dateline>".TIME_NOW."</dateline>\n";
| $error_data = "<error>\n"; $error_data .= "\t<dateline>".TIME_NOW."</dateline>\n";
|
Zeile 338 | Zeile 379 |
---|
$error_data .= "\t<type>".$type."</type>\n"; $error_data .= "\t<friendly_type>".$this->error_types[$type]."</friendly_type>\n"; $error_data .= "\t<message>".$message."</message>\n";
|
$error_data .= "\t<type>".$type."</type>\n"; $error_data .= "\t<friendly_type>".$this->error_types[$type]."</friendly_type>\n"; $error_data .= "\t<message>".$message."</message>\n";
|
| $error_data .= $back_trace;
|
$error_data .= "</error>\n\n";
|
$error_data .= "</error>\n\n";
|
if(trim($mybb->settings['errorloglocation']) != "")
| if(isset($mybb->settings['errorloglocation']) && trim($mybb->settings['errorloglocation']) != "")
|
{ @error_log($error_data, 3, $mybb->settings['errorloglocation']); }
| { @error_log($error_data, 3, $mybb->settings['errorloglocation']); }
|
Zeile 363 | Zeile 405 |
---|
{ global $mybb;
|
{ global $mybb;
|
if(!$mybb->settings['adminemail'])
| if(empty($mybb->settings['adminemail']))
|
{ return false;
|
{ return false;
|
}
| }
|
if($type == MYBB_SQL) { $message = "SQL Error: {$message['error_no']} - {$message['error']}\nQuery: {$message['query']}";
|
if($type == MYBB_SQL) { $message = "SQL Error: {$message['error_no']} - {$message['error']}\nQuery: {$message['query']}";
|
}
$message = "Your copy of MyBB running on {$mybb->settings['bbname']} ({$mybb->settings['bburl']}) has experienced an error. Details of the error include:\n---\nType: $type\nFile: $file (Line no. $line)\nMessage\n$message";
| }
if(function_exists('debug_backtrace')) { ob_start(); debug_print_backtrace(); $trace = ob_get_contents(); ob_end_clean();
$back_trace = "\nBack Trace: {$trace}"; } else { $back_trace = ''; }
$message = "Your copy of MyBB running on {$mybb->settings['bbname']} ({$mybb->settings['bburl']}) has experienced an error. Details of the error include:\n---\nType: $type\nFile: $file (Line no. $line)\nMessage\n$message{$back_trace}";
|
@my_mail($mybb->settings['adminemail'], "MyBB error on {$mybb->settings['bbname']}", $message, $mybb->settings['adminemail']);
return true;
| @my_mail($mybb->settings['adminemail'], "MyBB error on {$mybb->settings['bbname']}", $message, $mybb->settings['adminemail']);
return true;
|
Zeile 390 | Zeile 446 |
---|
{ global $mybb, $parser, $lang;
|
{ global $mybb, $parser, $lang;
|
if(!$mybb->settings['bbname'])
| if(isset($mybb->settings['bbname']))
|
{
|
{
|
$mybb->settings['bbname'] = "MyBB";
| $bbname = $mybb->settings['bbname'];
|
}
|
}
|
| else { $bbname = "MyBB"; }
// For some reason in the installer this setting is set to "<" $accepted_error_types = array('both', 'error', 'warning', 'none'); if(isset($mybb->settings['errortypemedium']) && in_array($mybb->settings['errortypemedium'], $accepted_error_types)) { $errortypemedium = $mybb->settings['errortypemedium']; } else { $errortypemedium = "none"; }
$show_details = ( $this->force_display_errors || in_array($errortypemedium, array('both', 'error')) || defined("IN_INSTALL") || defined("IN_UPGRADE") );
|
if($type == MYBB_SQL) { $title = "MyBB SQL Error"; $error_message = "<p>MyBB has experienced an internal SQL error and cannot continue.</p>";
|
if($type == MYBB_SQL) { $title = "MyBB SQL Error"; $error_message = "<p>MyBB has experienced an internal SQL error and cannot continue.</p>";
|
if($mybb->settings['errortypemedium'] == "both" || $mybb->settings['errortypemedium'] == "error" || defined("IN_INSTALL") || defined("IN_UPGRADE"))
| if($show_details)
|
{ $message['query'] = htmlspecialchars_uni($message['query']); $message['error'] = htmlspecialchars_uni($message['error']);
| { $message['query'] = htmlspecialchars_uni($message['query']); $message['error'] = htmlspecialchars_uni($message['error']);
|
Zeile 416 | Zeile 494 |
---|
{ $title = "MyBB Internal Error"; $error_message = "<p>MyBB has experienced an internal error and cannot continue.</p>";
|
{ $title = "MyBB Internal Error"; $error_message = "<p>MyBB has experienced an internal error and cannot continue.</p>";
|
if($mybb->settings['errortypemedium'] == "both" || $mybb->settings['errortypemedium'] == "error" || defined("IN_INSTALL") || defined("IN_UPGRADE"))
| if($show_details)
|
{ $error_message .= "<dl>\n"; $error_message .= "<dt>Error Type:</dt>\n<dd>{$this->error_types[$type]} ($type)</dd>\n";
| { $error_message .= "<dl>\n"; $error_message .= "<dt>Error Type:</dt>\n<dd>{$this->error_types[$type]} ($type)</dd>\n";
|
Zeile 427 | Zeile 505 |
---|
if(!@preg_match('#config\.php|settings\.php#', $file) && @file_exists($file)) { $code_pre = @file($file);
|
if(!@preg_match('#config\.php|settings\.php#', $file) && @file_exists($file)) { $code_pre = @file($file);
|
|
|
$code = "";
|
$code = "";
|
|
|
if(isset($code_pre[$line-4])) { $code .= $line-3 . ". ".$code_pre[$line-4];
|
if(isset($code_pre[$line-4])) { $code .= $line-3 . ". ".$code_pre[$line-4];
|
}
| }
|
if(isset($code_pre[$line-3])) { $code .= $line-2 . ". ".$code_pre[$line-3]; }
if(isset($code_pre[$line-2]))
|
if(isset($code_pre[$line-3])) { $code .= $line-2 . ". ".$code_pre[$line-3]; }
if(isset($code_pre[$line-2]))
|
{
| {
|
$code .= $line-1 . ". ".$code_pre[$line-2]; }
|
$code .= $line-1 . ". ".$code_pre[$line-2]; }
|
|
|
$code .= $line . ". ".$code_pre[$line-1]; // The actual line.
if(isset($code_pre[$line]))
|
$code .= $line . ". ".$code_pre[$line-1]; // The actual line.
if(isset($code_pre[$line]))
|
{
| {
|
$code .= $line+1 . ". ".$code_pre[$line]; }
if(isset($code_pre[$line+1])) { $code .= $line+2 . ". ".$code_pre[$line+1];
|
$code .= $line+1 . ". ".$code_pre[$line]; }
if(isset($code_pre[$line+1])) { $code .= $line+2 . ". ".$code_pre[$line+1];
|
}
| }
|
if(isset($code_pre[$line+2])) { $code .= $line+3 . ". ".$code_pre[$line+2];
|
if(isset($code_pre[$line+2])) { $code .= $line+3 . ". ".$code_pre[$line+2];
|
}
unset($code_pre);
| }
unset($code_pre);
|
$parser_exists = false;
| $parser_exists = false;
|
Zeile 476 | Zeile 554 |
---|
} } else
|
} } else
|
{
| {
|
$parser_exists = true; }
if($parser_exists) { $code = $parser->mycode_parse_php($code, true);
|
$parser_exists = true; }
if($parser_exists) { $code = $parser->mycode_parse_php($code, true);
|
}
| }
|
else { $code = @nl2br($code);
| else { $code = @nl2br($code);
|
Zeile 491 | Zeile 569 |
---|
$error_message .= "<dt>Code:</dt><dd>{$code}</dd>\n"; }
|
$error_message .= "<dt>Code:</dt><dd>{$code}</dd>\n"; }
|
}
| }
|
$backtrace = $this->generate_backtrace(); if($backtrace && !in_array($type, $this->mybb_error_types)) { $error_message .= "<dt>Backtrace:</dt><dd>{$backtrace}</dd>\n"; } $error_message .= "</dl>\n";
|
$backtrace = $this->generate_backtrace(); if($backtrace && !in_array($type, $this->mybb_error_types)) { $error_message .= "<dt>Backtrace:</dt><dd>{$backtrace}</dd>\n"; } $error_message .= "</dl>\n";
|
} }
| } }
|
if(isset($lang->settings['charset'])) {
| if(isset($lang->settings['charset'])) {
|
Zeile 509 | Zeile 587 |
---|
{ $charset = 'UTF-8'; }
|
{ $charset = 'UTF-8'; }
|
| $contact_site_owner = ''; $is_in_contact = defined('THIS_SCRIPT') && THIS_SCRIPT === 'contact.php'; if( !empty($mybb->settings['contactlink']) && ( !empty($mybb->settings['contact']) && !$is_in_contact && ( $mybb->settings['contactlink'] == "contact.php" && ( !isset($mybb->user['uid']) || ($mybb->settings['contact_guests'] != 1 && $mybb->user['uid'] == 0) || $mybb->user['uid'] > 0 ) ) || $mybb->settings['contactlink'] != "contact.php" ) ) { if( !my_validate_url($mybb->settings['contactlink'], true, true) && my_substr($mybb->settings['contactlink'], 0, 7) != 'mailto:' ) { $mybb->settings['contactlink'] = $mybb->settings['bburl'].'/'.$mybb->settings['contactlink']; }
$contact_site_owner = <<<HTML If this problem persists, please <a href="{$mybb->settings['contactlink']}">contact the site owner</a>. HTML; }
$additional_name = ''; $docs_link = 'https://docs.mybb.com'; $common_issues_link = 'https://docs.mybb.com/1.8/faq/'; $support_link = 'https://community.mybb.com/';
if(isset($lang->settings['docs_link'])) { $docs_link = $lang->settings['docs_link']; }
if(isset($lang->settings['common_issues_link'])) { $common_issues_link = $lang->settings['common_issues_link']; }
if(isset($lang->settings['support_link'])) { $support_link = $lang->settings['support_link']; }
if(isset($lang->settings['additional_name'])) { $additional_name = $lang->settings['additional_name']; }
$contact = <<<HTML <p> <strong>If you're a visitor of this website</strong>, please wait a few minutes and try again.{$contact_site_owner} </p>
<p> <strong>If you are the site owner</strong>, please check the <a href="{$docs_link}">MyBB{$additional_name} Documentation</a> for help resolving <a href="{$common_issues_link}">common issues</a>, or get technical help on the <a href="{$support_link}">MyBB{$additional_name} Community Forums</a>. </p> HTML;
|
if(!headers_sent() && !defined("IN_INSTALL") && !defined("IN_UPGRADE")) {
| if(!headers_sent() && !defined("IN_INSTALL") && !defined("IN_UPGRADE")) {
|
Zeile 516 | Zeile 662 |
---|
@header('Status: 503 Service Temporarily Unavailable'); @header('Retry-After: 1800'); @header("Content-type: text/html; charset={$charset}");
|
@header('Status: 503 Service Temporarily Unavailable'); @header('Retry-After: 1800'); @header("Content-type: text/html; charset={$charset}");
|
$file_name = htmlspecialchars_uni(basename($_SERVER['SCRIPT_FILENAME']));
| $file_name = basename($_SERVER['SCRIPT_FILENAME']); if(function_exists('htmlspecialchars_uni')) { $file_name = htmlspecialchars_uni($file_name); } else { $file_name = htmlspecialchars($file_name); }
|
echo <<<EOF <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> <head profile="http://gmpg.org/xfn/11"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
echo <<<EOF <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> <head profile="http://gmpg.org/xfn/11"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
<title>{$mybb->settings['bbname']} - Internal Error</title>
| <title>{$bbname} - Internal Error</title>
|
<style type="text/css"> body { background: #efefef; color: #000; font-family: Tahoma,Verdana,Arial,Sans-Serif; font-size: 12px; text-align: center; line-height: 1.4; } a:link { color: #026CB1; text-decoration: none; }
| <style type="text/css"> body { background: #efefef; color: #000; font-family: Tahoma,Verdana,Arial,Sans-Serif; font-size: 12px; text-align: center; line-height: 1.4; } a:link { color: #026CB1; text-decoration: none; }
|
Zeile 550 | Zeile 705 |
---|
<div id="error"> {$error_message}
|
<div id="error"> {$error_message}
|
<p id="footer">Please contact the <a href="https://mybb.com">MyBB Group</a> for technical support.</p>
| <p id="footer">{$contact}</p>
|
</div> </div> </div>
| </div> </div> </div>
|
Zeile 575 | Zeile 730 |
---|
<h2>{$title}</h2> <div id="mybb_error_error"> {$error_message}
|
<h2>{$title}</h2> <div id="mybb_error_error"> {$error_message}
|
<p id="mybb_error_footer">Please contact the <a href="https://mybb.com">MyBB Group</a> for technical support.</p>
| <p id="mybb_error_footer">{$contact}</p>
|
</div> </div> EOF; }
|
</div> </div> EOF; }
|
|
|
exit(1); }
|
exit(1); }
|
|
|
/** * Generates a backtrace if the server supports it. * * @return string The generated backtrace */
|
/** * Generates a backtrace if the server supports it. * * @return string The generated backtrace */
|
function generate_backtrace()
| function generate_backtrace($html=true, $strip=1)
|
{ $backtrace = ''; if(function_exists("debug_backtrace")) {
|
{ $backtrace = ''; if(function_exists("debug_backtrace")) {
|
$trace = debug_backtrace(); $backtrace = "<table style=\"width: 100%; margin: 10px 0; border: 1px solid #aaa; border-collapse: collapse; border-bottom: 0;\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\">\n"; $backtrace .= "<thead><tr>\n"; $backtrace .= "<th style=\"border-bottom: 1px solid #aaa; background: #ccc; padding: 4px; text-align: left; font-size: 11px;\">File</th>\n"; $backtrace .= "<th style=\"border-bottom: 1px solid #aaa; background: #ccc; padding: 4px; text-align: left; font-size: 11px;\">Line</th>\n"; $backtrace .= "<th style=\"border-bottom: 1px solid #aaa; background: #ccc; padding: 4px; text-align: left; font-size: 11px;\">Function</th>\n"; $backtrace .= "</tr></thead>\n<tbody>\n";
| $trace = debug_backtrace(1<<1 /* DEBUG_BACKTRACE_IGNORE_ARGS */);
|
|
|
// Strip off this function from trace array_shift($trace);
| if($html) { $backtrace = "<table style=\"width: 100%; margin: 10px 0; border: 1px solid #aaa; border-collapse: collapse; border-bottom: 0;\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\">\n"; $backtrace .= "<thead><tr>\n"; $backtrace .= "<th style=\"border-bottom: 1px solid #aaa; background: #ccc; padding: 4px; text-align: left; font-size: 11px;\">File</th>\n"; $backtrace .= "<th style=\"border-bottom: 1px solid #aaa; background: #ccc; padding: 4px; text-align: left; font-size: 11px;\">Line</th>\n"; $backtrace .= "<th style=\"border-bottom: 1px solid #aaa; background: #ccc; padding: 4px; text-align: left; font-size: 11px;\">Function</th>\n"; $backtrace .= "</tr></thead>\n<tbody>\n"; }
// Strip off calls from trace $trace = array_slice($trace, $strip);
$i = 0;
|
foreach($trace as $call) { if(empty($call['file'])) $call['file'] = "[PHP]";
|
foreach($trace as $call) { if(empty($call['file'])) $call['file'] = "[PHP]";
|
if(empty($call['line'])) $call['line'] = " ";
| if(empty($call['line'])) $call['line'] = " ";
|
if(!empty($call['class'])) $call['function'] = $call['class'].$call['type'].$call['function']; $call['file'] = str_replace(MYBB_ROOT, "/", $call['file']);
|
if(!empty($call['class'])) $call['function'] = $call['class'].$call['type'].$call['function']; $call['file'] = str_replace(MYBB_ROOT, "/", $call['file']);
|
$backtrace .= "<tr>\n"; $backtrace .= "<td style=\"font-size: 11px; padding: 4px; border-bottom: 1px solid #ccc;\">{$call['file']}</td>\n"; $backtrace .= "<td style=\"font-size: 11px; padding: 4px; border-bottom: 1px solid #ccc;\">{$call['line']}</td>\n"; $backtrace .= "<td style=\"font-size: 11px; padding: 4px; border-bottom: 1px solid #ccc;\">{$call['function']}</td>\n"; $backtrace .= "</tr>\n";
| if($html) { $backtrace .= "<tr>\n"; $backtrace .= "<td style=\"font-size: 11px; padding: 4px; border-bottom: 1px solid #ccc;\">{$call['file']}</td>\n"; $backtrace .= "<td style=\"font-size: 11px; padding: 4px; border-bottom: 1px solid #ccc;\">{$call['line']}</td>\n"; $backtrace .= "<td style=\"font-size: 11px; padding: 4px; border-bottom: 1px solid #ccc;\">{$call['function']}</td>\n"; $backtrace .= "</tr>\n"; } else { $backtrace .= "#{$i} {$call['function']}() called at [{$call['file']}:{$call['line']}]\n"; }
$i++; }
if($html) { $backtrace .= "</tbody></table>\n";
|
}
|
}
|
$backtrace .= "</tbody></table>\n";
| |
} return $backtrace; }
| } return $backtrace; }
|