Beste tweakers
Ik ben bezig met een eigen error handler.
Het idee is alsvolgt:
1. Er treedt een fout op
2. Probeer een connectie te maken naar een database en zet het foutenrapport in de db
Als dit gelukt is, bekijk of er een mailtje naar de webmaster gestuurd moet worden of niet
3. Als de database connectie mislukt, moet de fout weggeschreven worden naar een text file.
Voor het connecten naar de database gebruik ik mijn database class. Het is dus van belang dat mysql_connect, mysql_query etc etc geen foutmeldingen weergeven en deze wilde ik dus onderdrukken met '@'.
Als er tijdens het connecten naar de database iets fout gaat wil ik dat er een E_USER_ERROR getriggerd wordt, dit dacht ik zo op te lossen:
Deel uit database class
Nu heb ik het volgende probleem, als ik mijn eigen error handler defineer dan lijkt het of het effect van het '@' ongedaan gemaakt wordt.
Dit geeft de foutmelding die ik wil namelijk:
Fatal error: database foutje: Access denied for user 'visstick'@'localhost' (using password: YES) in C:\Program Files\Apache Group\Apache2\cms\0.1\includes\database.class.php on line 84
Maar, als ik de '//' voor set_error_handler("testErrorHandler") weghaal (Dus mijn eigen error handler ga gebruiken), dan krijg ik:
11-23-2005 00:11:20 2 Warning mysql_connect() [function.mysql-connect]: Access denied for user 'visstick'@'localhost' (using password: YES) C:\Program Files\Apache Group\Apache2\cms\0.1\includes\database.class.php 82
Dit is dus de foutmelding die gegenereerd wordt door mysql_connect, maar die had ik onderdrukt
Dit is mijn error_handler functie:
Weet iemand waarom ik met mijn eigen error handler niet de foutmelding krijg die ik wil?
Alvast bedankt
Justin
Ik ben bezig met een eigen error handler.
Het idee is alsvolgt:
1. Er treedt een fout op
2. Probeer een connectie te maken naar een database en zet het foutenrapport in de db
Als dit gelukt is, bekijk of er een mailtje naar de webmaster gestuurd moet worden of niet
3. Als de database connectie mislukt, moet de fout weggeschreven worden naar een text file.
Voor het connecten naar de database gebruik ik mijn database class. Het is dus van belang dat mysql_connect, mysql_query etc etc geen foutmeldingen weergeven en deze wilde ik dus onderdrukken met '@'.
Als er tijdens het connecten naar de database iets fout gaat wil ik dat er een E_USER_ERROR getriggerd wordt, dit dacht ik zo op te lossen:
Deel uit database class
PHP:
1
2
3
4
5
| #Try to connect to the database server, on failure report this error; if(!$this->sLinkID = @mysql_connect($this->sHost.':'.$this->iPort_nr,$this->sUsername,$sPassword)){ $this->setSQLError(mysql_error(), mysql_errno()); trigger_error('database foutje: '.$this->getErrorMsg(),E_USER_ERROR); } |
Nu heb ik het volgende probleem, als ik mijn eigen error handler defineer dan lijkt het of het effect van het '@' ongedaan gemaakt wordt.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| #This is a parent file define('cIsParent',1); session_start(); include_once("../includes/configuration.inc.php"); require_once("languages/language.php"); require_once("../includes/error_reporting.inc.php"); #Set error reporting to E_ALL and use our own error reporting system //set_error_handler('testErrorHandler'); error_reporting(E_ALL); if($_SERVER['REQUEST_METHOD'] == "POST"){ require_once("../includes/database.class.php"); require_once("includes/hash.inc.php"); #Connect to the database(s) $dp = new database(); $dp->connect("localhost","visstick","xxx",""); //visstick is dus geen geldige gebruiker $dp->setDatabase('ploegedb1',''); //rest van het script |
Dit geeft de foutmelding die ik wil namelijk:
Fatal error: database foutje: Access denied for user 'visstick'@'localhost' (using password: YES) in C:\Program Files\Apache Group\Apache2\cms\0.1\includes\database.class.php on line 84
Maar, als ik de '//' voor set_error_handler("testErrorHandler") weghaal (Dus mijn eigen error handler ga gebruiken), dan krijg ik:
11-23-2005 00:11:20 2 Warning mysql_connect() [function.mysql-connect]: Access denied for user 'visstick'@'localhost' (using password: YES) C:\Program Files\Apache Group\Apache2\cms\0.1\includes\database.class.php 82
Dit is dus de foutmelding die gegenereerd wordt door mysql_connect, maar die had ik onderdrukt
Dit is mijn error_handler functie:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
| #Make sure this page is included by a parent file defined('cIsParent') or exit(); #The array with error types $errortype = array ( E_ERROR => "Error", E_WARNING => "Warning", E_PARSE => "Parsing Error", E_NOTICE => "Notice", E_CORE_ERROR => "Core Error", E_CORE_WARNING => "Core Warning", E_COMPILE_ERROR=> "Compile Error", E_COMPILE_WARNING => "Compile Warning", E_USER_ERROR => "User Error", E_USER_WARNING => "User Warning", E_USER_NOTICE => "User Notice" ); $user_errors = array(E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE); function testErrorHandler($type, $msg, $file, $line, $vars){ global $errortype, $user_errors; if($type != E_STRICT){ $err = "<errorentry>\n"; $err .= "\t<datetime>".date('m-d-Y H:m:i')."</datetime>\n"; $err .= "\t<errornum>".$type."</errornum>\n"; $err .= "\t<errortype>".$errortype[$type]. "</errortype>\n"; $err .= "\t<errormsg>".$msg."</errormsg>\n"; $err .= "\t<scriptname>".$file."</scriptname>\n"; $err .= "\t<scriptlinenum>".$line."</scriptlinenum>\n"; if (in_array($type, $user_errors)) { $err .= "\t<vartrace>" . wddx_serialize_value($vars, "Variables") . "</vartrace>\n"; } $err .= "</errorentry>\n\n"; echo $err; exit('exit in errorhandler'); } } |
Weet iemand waarom ik met mijn eigen error handler niet de foutmelding krijg die ik wil?
Alvast bedankt
Justin