| | |
| | | +-----------------------------------------------------------------------+ |
| | | | program/include/bugs.inc | |
| | | | | |
| | | | This file is part of the BQube Webmail client | |
| | | | Copyright (C) 2005, BQube Dev - Switzerland | |
| | | | This file is part of the RoudCube Webmail client | |
| | | | Copyright (C) 2005-2007, RoudCube Dev - Switzerland | |
| | | | Licensed under the GNU GPL | |
| | | | | |
| | | | PURPOSE: | |
| | |
| | | */ |
| | | |
| | | |
| | | // throw system error and show error page |
| | | function raise_error($arg=array(), $log=FALSE, $terminate=FALSE) |
| | | /** |
| | | * Error handling and logging functions |
| | | * |
| | | * @package Core |
| | | */ |
| | | |
| | | |
| | | /** |
| | | * Throw system error and show error page |
| | | * |
| | | * @param array Named parameters |
| | | * - code: Error code (required) |
| | | * - type: Error type [php|db|imap|javascript] (required) |
| | | * - message: Error message |
| | | * - file: File where error occured |
| | | * - line: Line where error occured |
| | | * @param boolean True to log the error |
| | | * @param boolean Terminate script execution |
| | | */ |
| | | function raise_error($arg=array(), $log=false, $terminate=false) |
| | | { |
| | | global $__page_content, $CONFIG, $OUTPUT, $ERROR_CODE, $ERROR_MESSAGE; |
| | | |
| | | /* $arg keys: |
| | | int code |
| | | string type (php, xpath, db, imap, javascript) |
| | | string message |
| | | sring file |
| | | int line |
| | | */ |
| | | |
| | | // report bug (if not incompatible browser) |
| | | if ($log && $arg['type'] && $arg['message']) |
| | | log_bug($arg); |
| | |
| | | } |
| | | |
| | | |
| | | // report error |
| | | /** |
| | | * Report error according to configured debug_level |
| | | * |
| | | * @param array Named parameters |
| | | * @see raise_error() |
| | | */ |
| | | function log_bug($arg_arr) |
| | | { |
| | | global $CONFIG, $INSTALL_PATH; |
| | | $program = $arg_arr['type']=='xpath' ? 'XPath' : strtoupper($arg_arr['type']); |
| | | { |
| | | global $CONFIG; |
| | | $program = strtoupper($arg_arr['type']); |
| | | |
| | | // write error to local log file |
| | | if ($CONFIG['debug_level'] & 1) |
| | | { |
| | | $log_entry = sprintf("[%s] %s Error: %s in %s on line %d\n", |
| | | date("d-M-Y H:i:s O", mktime()), |
| | | $program, |
| | | $arg_arr['message'], |
| | | $arg_arr['file'], |
| | | $arg_arr['line']); |
| | | |
| | | if (empty($CONFIG['log_dir'])) |
| | | $CONFIG['log_dir'] = $INSTALL_PATH.'logs'; |
| | | { |
| | | $post_query = ($_SERVER['REQUEST_METHOD'] == 'POST' ? '?_task='.urlencode($_POST['_task']).'&_action='.urlencode($_POST['_action']) : ''); |
| | | $log_entry = sprintf("[%s] %s Error: %s%s (%s %s)\n", |
| | | date("d-M-Y H:i:s O", mktime()), |
| | | $program, |
| | | $arg_arr['message'], |
| | | $arg_arr['file'] ? sprintf(' in %s on line %d', $arg_arr['file'], $arg_arr['line']) : '', |
| | | $_SERVER['REQUEST_METHOD'], |
| | | $_SERVER['REQUEST_URI'] . $post_query); |
| | | |
| | | if ($fp = fopen($CONFIG['log_dir'].'/errors', 'a')) |
| | | |
| | | { |
| | | if (empty($CONFIG['log_dir'])) |
| | | $CONFIG['log_dir'] = INSTALL_PATH.'logs'; |
| | | |
| | | // try to open specific log file for writing |
| | | if ($CONFIG['log_driver'] == 'syslog') |
| | | { |
| | | syslog(LOG_ERR, $log_entry); |
| | | } |
| | | else if ($fp = @fopen($CONFIG['log_dir'].'/errors', 'a')) |
| | | { |
| | | // log_driver == 'file' is the default, assumed here. |
| | | fwrite($fp, $log_entry); |
| | | fclose($fp); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | // send error to PHPs error handler |
| | | trigger_error($arg_arr['message']); |
| | | } |
| | | } |
| | | |
| | | /* |
| | | // resport the bug to the global bug reporting system |
| | | if ($CONFIG['debug_level'] & 2) |
| | | { |
| | | $delm = '%AC'; |
| | | http_request(sprintf('http://roundcube.net/log/bug.php?_type=%s&_domain=%s&_server_ip=%s&_client_ip=%s&_useragent=%s&_url=%s%%3A//%s&_errors=%s%s%s%s%s', |
| | | $arg_arr['type'], |
| | | $GLOBALS['HTTP_HOST'], |
| | | $GLOBALS['SERVER_ADDR'], |
| | | $GLOBALS['REMOTE_ADDR'], |
| | | rawurlencode($GLOBALS['HTTP_USER_AGENT']), |
| | | $GLOBALS['SERVER_PORT']==43 ? 'https' : 'http', |
| | | $GLOBALS['HTTP_HOST'].$GLOBALS['REQUEST_URI'], |
| | | $arg_arr['file'], $delm, |
| | | $arg_arr['line'], $delm, |
| | | rawurlencode($arg_arr['message']))); |
| | | } |
| | | */ |
| | | { |
| | | // TODO: Send error via HTTP |
| | | } |
| | | |
| | | // show error if debug_mode is on |
| | | if ($CONFIG['debug_level'] & 4) |
| | | { |
| | | { |
| | | print "<b>$program Error"; |
| | | |
| | | if (!empty($arg_arr['file']) && !empty($arg_arr['line'])) |
| | |
| | | print nl2br($arg_arr['message']); |
| | | print '<br />'; |
| | | flush(); |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | ?> |
| | | ?> |