/** * If database error display results and perhaps exit program * @param string $errorString Error string from program attempting the database connection * @param string $query query that cause the error * @param array $values array of values passed to the query * * return - false on no error */ function error($errorString, $query = "", $values = "") { global $session; $errorSql = false; if (!$this->db) { // database object is broken $errorSql = true; $error = "\nDatabase error " . date('d/m/Y H:i:s'); $error .= "\nPackege Error: " . $errorString . "\nQuery: " . $query . "\n"; $this->errorDescription = $error; } elseif ($this->db->ErrorNo() != 0) { // normal error $errorSql = true; $error = "\nDatabase error " . date('d/m/Y H:i:s'); $error .= sprintf("\nRoutine producing error: %s\n", $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']); $error .= "\nPackege Error: " . $errorString . "\nQuery: " . $query . "\n"; $error .= sprintf("ADODB Error: [%d]: %s\n", $this->db->ErrorNo(), $this->db->ErrorMsg()); if (is_array($values) and count($values)) { "\nSql replacement arguments"; "'" . implode("', '", $values) . "'\n"; } if (trim($_SERVER['QUERY_STRING']) != "") { $error .= sprintf("\nQuery string: %s\n", $_SERVER['QUERY_STRING']); } if ($this->cfg->errorDisplayBacktrace) { $error .= "Debug backtrace\n"; $backtrace = debug_backtrace(); foreach ($backtrace as $routine) { if (!isset($routine['file'])) { // probably call_user_func $error .= "call_user_func\n"; } else { $error .= "Line " . $routine['line'] . " of " . $routine['file'] . "\n"; if (isset($routine['function'])) { $error .= " In function " . $routine['function'] . "\n"; if (isset($routine['args']) and is_Array($routine['args'])) { $error .= " Arguments "; foreach ($routine['args'] as $arg => $argValue) { if (is_array($argValue) or is_object($argValue)) { $argValue = serialize($argValue); } $error .= $arg . " = '" . $argValue . "' "; } $error .= "\n"; } } } } } $error .= sprintf("Users remote IP address: %s\n", $_SERVER['REMOTE_ADDR']); if (is_object($session) and $session->loggedIn) { // put in user info if available $userAdmin = new UserAdmin($session, ''); $error .= sprintf("Users name: %s\n", $userAdmin->getName($session->userId, false)); $error .= sprintf("Users id: %s\n", $session->userId); } $this->errorDescription = $error; } if ($errorSql) { $this->error = true; if ($this->cfg->displaySqlFaults) { echo '<head></head><body><pre>'; echo $this->errorDescription; echo '</pre></body>'; } else { error_log($error, $this->cfg->message_type, $this->cfg->errorLog); foreach ($this->cfg->errorAdmins as $toAddress => $toName) { ECRIAmailer("SSP SQL error handler", $this->cfg->noReplyEmail, $toName, $toAddress, "SSP SQL error on " . $this->cfg->siteName, $error); } } if ($this->abortOnError) { die("<p>Database error: Information has been emailed to admin</p>"); } } return $this->error; }
/** * Display an error, save to log and email to admins * @global SSP_Configure $SSP_Config * @param int $errno * @param string $errstr - error generated * @param string $errfile - file in whioch the error occurs * @param int $errline */ function SSP_errorHandler($errno, $errstr, $errfile, $errline) { /* @var $SSP_Config SSP_Configuration */ $SSP_Config = Configuration::getConfiguration(); $error = SSP_error($errstr, $errno, false); if ($SSP_Config->displayNoticesWarnings) { echo '<pre>'; echo $error; echo '</pre>'; } else { error_log($error, $SSP_Config->message_type, $SSP_Config->errorLog, $SSP_Config->adminEmail); foreach ($SSP_Config->errorAdmins as $toAddress => $toName) { ECRIAmailer("SSP error handler", $SSP_Config->noReplyEmail, $toName, $toAddress, "Notice or warning on " . $SSP_Config->siteName, $error); } } }