Module: nagvis Branch: master Commit: b2360c33191769651b9e9311fe246d0ded60e669 URL: http://nagvis.git.sourceforge.net/git/gitweb.cgi?p=nagvis/nagvis;a=commit;h=b2360c33191769651b9e9311fe246d0ded60e669
Author: Lars Michelsen <[email protected]> Date: Wed Dec 29 10:54:52 2010 +0100 Recoded php error handler to use exceptions; Suppressing ps_files_cleanup_dir errors --- ChangeLog | 1 + share/frontend/nagvis-js/index.php | 1 + share/frontend/nagvis-js/js/nagvis.js | 4 +- share/frontend/wui/index.php | 1 + share/server/core/ajax_handler.php | 2 +- share/server/core/classes/CoreSessionHandler.php | 13 ++++++++- ...ajaxErrorHandler.php => nagvisErrorHandler.php} | 25 ++++++++++++++++---- share/userfiles/templates/default.css | 5 ++++ 8 files changed, 42 insertions(+), 10 deletions(-) diff --git a/ChangeLog b/ChangeLog index 68f6487..c79f53c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -22,6 +22,7 @@ Core * All map objects need to have an object id which needs to be unique on each map. All map objects which have no object id defined will ge one created. This makes migration easier. + * Catching ps_files_cleanup_dir error message (strange error debian/ubuntu) Automap * Made automap coord parsing regex resistent against html entities in the URL diff --git a/share/frontend/nagvis-js/index.php b/share/frontend/nagvis-js/index.php index bbea357..2741427 100644 --- a/share/frontend/nagvis-js/index.php +++ b/share/frontend/nagvis-js/index.php @@ -33,6 +33,7 @@ require('defines/nagvis-js.php'); require('../../server/core/functions/autoload.php'); require('../../server/core/functions/debug.php'); require('../../server/core/functions/oldPhpVersionFixes.php'); +require('../../server/core/functions/nagvisErrorHandler.php'); require('../../server/core/classes/CoreExceptions.php'); if (PROFILE) profilingStart(); diff --git a/share/frontend/nagvis-js/js/nagvis.js b/share/frontend/nagvis-js/js/nagvis.js index 565128c..b1dd140 100644 --- a/share/frontend/nagvis-js/js/nagvis.js +++ b/share/frontend/nagvis-js/js/nagvis.js @@ -776,8 +776,8 @@ function handleJSError(sMsg, sUrl, iLine) { var oMsg = {}; oMsg.type = 'CRITICAL'; oMsg.message = "Javascript error occured:\n " + sMsg + " " - + sUrl + " (" + iLine + ")<br /><br /><font style='font-size:10px'>- Stacktrace - <br />" - + printStackTrace().join("<br />") + '</font>'; + + sUrl + " (" + iLine + ")<br /><br /><code>- Stacktrace - <br />" + + printStackTrace().join("<br />") + '</code>'; oMsg.title = "Javascript error"; // Handle application message/error diff --git a/share/frontend/wui/index.php b/share/frontend/wui/index.php index 3112f8e..ff26243 100644 --- a/share/frontend/wui/index.php +++ b/share/frontend/wui/index.php @@ -37,6 +37,7 @@ require('defines/wui.php'); require("../../server/core/functions/autoload.php"); require("../../server/core/functions/debug.php"); require("../../server/core/functions/oldPhpVersionFixes.php"); +require('../../server/core/functions/nagvisErrorHandler.php'); require('../../server/core/classes/CoreExceptions.php'); // This defines wether the GlobalMessage prints HTML or ajax error messages diff --git a/share/server/core/ajax_handler.php b/share/server/core/ajax_handler.php index e0e88e9..6b20112 100644 --- a/share/server/core/ajax_handler.php +++ b/share/server/core/ajax_handler.php @@ -30,7 +30,7 @@ require('../../server/core/defines/matches.php'); require('../../server/core/functions/autoload.php'); require('../../server/core/functions/debug.php'); require('../../server/core/functions/oldPhpVersionFixes.php'); -require('../../server/core/functions/ajaxErrorHandler.php'); +require('../../server/core/functions/nagvisErrorHandler.php'); require('../../server/core/classes/CoreExceptions.php'); if (PROFILE) profilingStart(); diff --git a/share/server/core/classes/CoreSessionHandler.php b/share/server/core/classes/CoreSessionHandler.php index 556ee25..c3d6354 100644 --- a/share/server/core/classes/CoreSessionHandler.php +++ b/share/server/core/classes/CoreSessionHandler.php @@ -46,10 +46,19 @@ class CoreSessionHandler { // Set custom params for the session cookie session_set_cookie_params(0, $sPath, $sDomain); - + // Start a session for the user when not started yet if(!isset($_SESSION)) { - session_start(); + try { + session_start(); + } catch(ErrorException $e) { + // Catch and suppress session cleanup errors. This is a problem + // especially on current debian/ubuntu: + // PHP error in ajax request handler: Error: (8) session_start(): + // ps_files_cleanup_dir: opendir(/var/lib/php5) failed: Permission denied (13) + if(strpos($e->getMessage(), 'ps_files_cleanup_dir') === false) + throw $e; + } // Store the creation time of the session $this->set('sessionExpires', time()+$iDuration); diff --git a/share/server/core/functions/ajaxErrorHandler.php b/share/server/core/functions/nagvisErrorHandler.php similarity index 66% rename from share/server/core/functions/ajaxErrorHandler.php rename to share/server/core/functions/nagvisErrorHandler.php index 00f6eca..5296665 100644 --- a/share/server/core/functions/ajaxErrorHandler.php +++ b/share/server/core/functions/nagvisErrorHandler.php @@ -38,19 +38,34 @@ function ajaxError($errno, $errstr = '', $file = '', $line = '') { die(); } -function ajaxException($OBJ) { +function nagvisException($OBJ) { try { - echo "Error: ".$OBJ->getMessage(); + if(get_class($OBJ) == 'ErrorException') { + echo "Error: (".$OBJ->getCode().") ".$OBJ->getMessage() + ." (".$OBJ->getFile().":".$OBJ->getLine().")<br /><br />\n "; + echo "<code>".str_replace("\n", "<br />\n", $OBJ->getTraceAsString())."</code>"; + } else { + echo "Error: ".$OBJ->getMessage(); + } + die(); } catch(Exception $e) { - echo "Error: Unexpected Problem in Exception Handler!"; + echo "Error: Unexpected Problem in Exception Handler!: ". $e->getMessage(); die(); } } +function nagvisExceptionErrorHandler($errno, $errstr, $errfile, $errline ) { + // Use current error_reporting settings to skip unwanted errors + if(!(error_reporting() & $errno)) + return false; + + throw new ErrorException($errstr, 0, $errno, $errfile, $errline); +} +set_error_handler("nagvisExceptionErrorHandler"); + // Enable custom error handling -set_error_handler('ajaxError'); if(function_exists('set_exception_handler')) { - set_exception_handler('ajaxException'); + set_exception_handler('nagvisException'); } ?> diff --git a/share/userfiles/templates/default.css b/share/userfiles/templates/default.css index 9c05349..be0add9 100644 --- a/share/userfiles/templates/default.css +++ b/share/userfiles/templates/default.css @@ -348,6 +348,11 @@ div.infopage a:hover { background-color: #CCE5FF; } +#messageBoxDiv code { + text-align: left; + font-size: 10px; +} + /* * popupWindow css */ ------------------------------------------------------------------------------ Learn how Oracle Real Application Clusters (RAC) One Node allows customers to consolidate database storage, standardize their database environment, and, should the need arise, upgrade to a full multi-node Oracle RAC database without downtime or disruption http://p.sf.net/sfu/oracle-sfdevnl _______________________________________________ Nagvis-checkins mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/nagvis-checkins
