login  Naam:   Wachtwoord: 
Registreer je!
 Scripts:

Scripts > PHP > Database tools > [PHP5] Database class met uitgebreide error report

[PHP5] Database class met uitgebreide error report

Auteur: flance - 03 april 2005 - 12:47 - Gekeurd door: XenoX - Hits: 12242 - Aantal punten: 4.25 (8 stemmen)


Dit is een klasje(class) die vanalles doet met je MySQL database en een uitgebreide error reporting geeft.
Let op: Deze class werkt alleen als je server PHP5 ondersteunt!!

Kleine uitleg/documentatie:

[b] Object __construct( arr connection_data [, bool advanced_errors ] ) (constructor, word uitgevoerd bij aanroepen class):[/b]
Deze functie maakt de database connectie.

[u]Parameters:[/u]
- [i]arr connection_data[/i]. Dit is een array met alle gegevens voor de connectie. Een voorbeeld volgt:
  1. <?
  2. $arr = array();
  3. $arr['host'] = "localhost";
  4. $arr['user'] = "db_user_name";
  5. $arr['pass'] = "db_user_pass";
  6. $arr['db'] = "db_name";
  7. ?>


- [i]bool advanced_errors[/i]. Zet deze op TRUE om een erg uitgebreide error reporting te krijgen, handig bij debuggen

[b] arr __destruct( void ) (destructor, word uitgevoerd bij vernietigen van de class of bij eindiging script) :[/b]
Deze functie sluit de database connectie en geeft een array met statistieken terug

[b] arr get_stats( void ) :[/b]
Retourneerd een array met statistieken.
Citaat:
Array
(
[0] => 1 // aantal uitgevoerde query's
[1] => 0.008783 //totale tijd die de class innam of in heeft genomen op moment van aanspreken
[2] => Array //spreekt voor zich
(
[0] => Uptime: 16575
[1] => Threads: 1
[2] => Questions: 449
[3] => Slow queries: 0
[4] => Opens: 54
[5] => Flush tables: 1
[6] => Open tables: 1 Queries per second avg: 0.027
)

)


[b] bool set_errorfile( [ str file [, bool check ]] ) :[/b]
Veranderd het errorbestand. Standaard is ingesteld: error.database.php

[u]Parameters:[/u]
- [i]str file[/i] : de locatie van het bestand, geen betekend standaard bestand (error.database.php)
- [i]bool check[/i] : moet het bestand gecheckt worden op beschrijfbaarheid en bestaan?

[i]Opmerking:[/i]Deze functie hoeft niet aangeroepen te worden, alleen voor weizigingen.

[b] resource query( str query [, int important ] ) :[/b]
Voert een query uit

[u]Parameters:[/u]
- [i]str query[/i] : de query die uitgevoerd moet worden
- [i]int important[/i]: 0-3 hoe belangrijk is het als er een error is?

[b]object fetch_object( [ resource query ] ) : [/b]
Retourneerd een object van de query.

[u]Parameters:[/u]
- [i]resource query[/i]: De query waarvan het object gegenereerd word. Als er niets ingevult word, word automatisch de laatst

uitgevoerde query genomen


[b]arr fetch_array( [ resource query ] ) :[/b]
Retourneerd een zowel associatieve als numerieke array

[u]Parameters:[/u]
- [i]resource query[/i]: De query waarvan de array gegenereerd word. Als er niets ingevult word, word automatisch de laatst

uitgevoerde query genomen


[b]arr fetch_assoc( [ resource query ] ) :[/b]
Retourneerd een associatieve array

[u]Parameters:[/u]
- [i]resource query[/i]: De query waarvan de array gegenereerd word. Als er niets ingevult word, word automatisch de laatst

uitgevoerde query genomen

[b]arr fetch_row( [ resource query ] ) :[/b]
Retourneerd een numerieke array

[u]Parameters:[/u]
- [i]resource query[/i]: De query waarvan de array gegenereerd word. Als er niets ingevult word, word automatisch de laatst

uitgevoerde query genomen

[b]int insert_id( void ) :[/b]
Retourneerd een getal welke gelijk staat aan het laatst ingevoerde ID van een primary key. Retourneerd FALSE als dit er niet is.

[b]int affected rows ( void ) :[/b]
Retourneerd een getal welke gelijk staat aan het aantal beïnvloedde rijen van een update/delete query.

[b]bool free_result ( void ) : [/b]
Retourneerd TRUE bij succes. Deze functie zet alle query resultaten vrij.


Dat was het denk ik.

Bij de functie fetch_object() en fetch_array() staat een groot lap commentaar, als je interesse hebt waarom, lees de eerste regel ervan.
Ik geef ook een voorbeeld van hoe je het kan gebruiken.

Zet alle bestanden in de map classes en spreek het vanuit de map daarboven aan (zoals ik ook doe met de test).

Code:

./test.php
  1. <?
  2. include ("classes/class.database.php");
  3.  
  4. $arr = array();
  5. $arr['host'] = "localhost";
  6. $arr['user'] = "test";
  7. $arr['pass'] = "";
  8. $arr['db'] = "test";
  9.  
  10.  
  11. $db = new db($arr,TRUE);
  12. $db->set_errorfile("mijn_error_bestand.txt",TRUE);
  13.  
  14. $db->query("SELECT * FROM ideas");
  15. while ($res = $db->fetch_assoc())
  16. {
  17. print_r($res)."\n\n\n\n";
  18. }
  19.  
  20. print_r($db->get_stats());
  21.  
  22. echo $db->insert_id();
  23.  
  24. unset($db); //connectie is gesloten
  25. ?>


./classes/class.database.php
  1. <?
  2. require ("classes/interface.database.php");
  3. require ("classes/class.foutmelding.php");
  4.  
  5. /********************************************
  6. * *
  7. * Deze class is geschreven door Flance, *
  8. * ookwel bekend als Jordi Betting. Deze *
  9. * class mag onbeperkt gebruikt worden, *
  10. * en ook onbeperkt gepubliceerd worden *
  11. * zolang deze notitie blijft staan. *
  12. * *
  13. * Het is niet toegestaan om deze class te *
  14. * verhandelen. *
  15. * *
  16. ********************************************/
  17.  
  18. class db implements databaseInterface
  19. {
  20. //
  21. // Variables
  22. //
  23. private $rConnect,$bShowError,$sLastQuery,$rLastQuery = NULL;
  24. private $sErrorFile;
  25. private $bConnected = FALSE;
  26. private $iQuery = 0;
  27. private $iExecStart;
  28.  
  29. //
  30. // Constructor - makes connection - Set default data
  31. //
  32. public function __construct($aConndata,$bError=FALSE)
  33. {
  34. $this->iExecStart = microtime(TRUE);
  35. $this->bShowError = $bError;
  36. $max_parameters = 2; //het maximaal mogelijk aantal parameters
  37. $this->set_errorfile();
  38. try
  39. {
  40. //
  41. // If the connection data is not an array
  42. //
  43. if(!is_array($aConndata))
  44. {
  45. //
  46. // Display error message
  47. //
  48. throw new Foutmelding("<i>DBclass</i> : constructor : Eerste parameter, de database connectie data, moet in een array gegeven worden.",3);
  49. }
  50. //
  51. // If the connection data is invalid
  52. //
  53. if(count($aConndata) != 4)
  54. {
  55. //
  56. // Display error message
  57. //
  58. throw new Foutmelding("<i>DBclass</i> : constructor : Eerste parameter, de database connectie data, heeft een onjuist aantal waarden.",3);
  59. }
  60. //
  61. // If second parameter isn't even a booleaan (noob!)
  62. //
  63. if(!is_bool($bError))
  64. {
  65. //
  66. // Display error message
  67. //
  68. throw new Foutmelding("<i>DBclass</i> : constructor : Tweede parameter moet boolean zijn..",1);
  69. $bError=FALSE;
  70. }
  71.  
  72. //
  73. // If there is an invalid amount of parameters
  74. //
  75. if(func_num_args() > $max_parameters)
  76. {
  77. throw new Foutmelding("<i>DBclass</i> : constructor : Er zijn te veel parameters meegegeven.",1);
  78. }
  79.  
  80. $this->rConnect = @mysql_connect($aConndata['host'],$aConndata['user'],$aConndata['pass']);
  81. //
  82. // If connecting failed
  83. //
  84. if(!$this->rConnect)
  85. {
  86. throw new Foutmelding("<i>DBclass</i> : constructor : Kan geen verbinding met database maken.",3);
  87. }
  88. //
  89. // if selecting database failed
  90. //
  91. if(!@mysql_select_db($aConndata['db']))
  92. {
  93. throw new Foutmelding("<i>DBclass</i> : constructor : Kan de database niet selecteren, controleer of de gebruiker de juiste permissies heeft.",3);
  94. }
  95. $this->bConnected = TRUE;
  96. }
  97. catch (Foutmelding $error)
  98. {
  99. echo $error; // het geven van de melding ( __toString() )
  100. //
  101. // If error type is a Warning
  102. //
  103. if ( $error->getCode() == 3 )
  104. {
  105. $error->setShowTrace($this->bShowError);
  106. $error->traceError();
  107. echo '<b>Het laden is stopgezet wegens een fatale error. Neem contact op met de webmaster en vernoem de bovenstaande error. Bedankt.</b>';
  108. //
  109. // Stop everything and DIE!
  110. //
  111. }
  112. }
  113. }
  114.  
  115.  
  116.  
  117. //
  118. // Destructor, will be executed when class is destroyed or at the end of the page automaticly, returns an array with stats
  119. //
  120. public function __destruct()
  121. {
  122. $this->is_connected();
  123. @mysql_close($this->rConnect);
  124. $this->bConnected=FALSE;
  125. $this->free_result();
  126. RETURN $this->get_stats();
  127. }
  128.  
  129.  
  130.  
  131. //
  132. // Function to calc the execution time from the beginning of the class till the moment this function is called
  133. //
  134. private function calcExecTime()
  135. {
  136. RETURN round(microtime(TRUE)-$this->iExecStart,6);
  137. }
  138.  
  139.  
  140. //
  141. // Function gives class stats in an array
  142. //
  143. public function get_stats()
  144. {
  145. $status = explode(" ", mysql_stat());
  146. RETURN array($this->iQuery,$this->calcExecTime(),$status);
  147. }
  148.  
  149.  
  150. //
  151. // checks if this thing is connected
  152. //
  153. private function is_connected()
  154. {
  155. // in princiepe kan deze functie nooit wat doen aangezien de database connectie al gecheckt word bij het connecten
  156. if ($this->bConnected === FALSE)
  157. {
  158. echo "<b>It's not possible to execute mysql functions if there is no connection.</b>";
  159. }
  160. RETURN NULL;
  161. }
  162.  
  163.  
  164.  
  165. public function set_errorfile($sFile="classes/error.database.php",$bCheck=FALSE)
  166. {
  167. try
  168. {
  169. //
  170. // If user want to check wheter file exists and is writable
  171. //
  172. if($bCheck === TRUE)
  173. {
  174. //
  175. // Do the check
  176. //
  177. if(file_exists($sFile) && is_writable($sFile))
  178. {
  179. //
  180. // If it is, save settings and return TRUE
  181. //
  182. $this->sErrorFile = $sFile;
  183. RETURN TRUE;
  184. }
  185. else
  186. {
  187. //
  188. // File does not exist or is nog writable - Return FALSE
  189. //
  190. throw new Foutmelding("<i>DBclass</i> : set_errorfile() : Het opgegeven bestand bestaat niet of is niet beschrijfbaar",1);
  191. }
  192. }
  193. else
  194. {
  195. $this->sErrorFile = $sFile;
  196. RETURN TRUE;
  197. }
  198. }
  199. catch (Foutmelding $error)
  200. {
  201. //
  202. // GRML! There is an error
  203. //
  204. echo $error;
  205. if ( $error->getCode() == 3 )
  206. {
  207. $error->setShowTrace($this->bShowError);
  208. $error->traceError();
  209. echo '<b>Het laden is stopgezet wegens een fatale error. Neem contact op met de webmaster en vernoem de bovenstaande error. Bedankt.</b>';
  210. //
  211. // Stop everything
  212. //
  213. }
  214. }
  215. }
  216.  
  217.  
  218.  
  219.  
  220.  
  221. //
  222. // Query - executes a query
  223. //
  224. public function query ($sQuery, $iImportant=0)
  225. {
  226. $this->is_connected();
  227. try
  228. {
  229. //
  230. // The possible query error
  231. //
  232. $query_error = "<i>DBclass</i> : query() : Query heeft gefaalt. Bekijk het error log voor meer informatie.";
  233. //
  234. // If the importancy is not a number
  235. //
  236. if (!is_int($iImportant))
  237. {
  238. //
  239. // Do the query
  240. //
  241. $this->query($sQuery);
  242. //
  243. // Leave a message....bleeb
  244. //
  245. throw new Foutmelding("<i>DBclass</i> : query() : Het errorlevel is ongeldig (geen INTEGER).",0);
  246. }
  247. //
  248. // Do query
  249. //
  250. $this->sLastQuery = $sQuery;
  251. $this->rLastQuery = @mysql_query($sQuery);
  252. //
  253. // If query failed
  254. //
  255. if($this->rLastQuery === FALSE)
  256. {
  257. //
  258. // Shout an error
  259. //
  260. throw new Foutmelding($query_error,$iImportant);
  261. }
  262. //
  263. // Everything went oke, return query result and count the query
  264. //
  265. $this->iQuery++;
  266. RETURN $query;
  267. }
  268. //
  269. // If an error was thrown
  270. //
  271. catch (Foutmelding $error)
  272. {
  273. //
  274. // Get the error
  275. //
  276. if (ereg($query_error,$error))
  277. {
  278. //
  279. // If error is the mysql_error, proceed to the error function
  280. //
  281. $this->sql_error("Query mislukt. Zie het logbestand voor meer informatie.");
  282. }
  283. else
  284. {
  285. //
  286. // or show the error
  287. //
  288. $this->sql_error("Query mislukt. Zie het logbestand voor meer informatie.");
  289. echo $error;
  290. $error->setShowTrace(FALSE);
  291. $error->traceError();
  292. }
  293. //
  294. // It went wrong, so return that
  295. //
  296. RETURN FALSE;
  297. }
  298. }
  299.  
  300.  
  301.  
  302.  
  303. //
  304. // Fetch_object()
  305. //
  306. public function fetch_object($rQuery='ding')
  307. {
  308. //
  309. // Check if there is a connection
  310. //
  311. $this->is_connected();
  312. //
  313. // If no resource query is given, use the last executed
  314. //
  315. if ($rQuery==='ding')
  316. {
  317. $rQuery=$this->rLastQuery;
  318. }
  319. /*commentaar omdat als je een error gaat gooien je bij while() een 4e result krijgt als er 3 results zijn.
  320.   try
  321.   {
  322.   //
  323.   // Execute function
  324.   //
  325.   $result = @mysql_fetch_object($rQuery);
  326.   if ($result === FALSE)
  327.   {
  328.   //
  329.   // Damn, it didn't work
  330.   //
  331.   throw new Foutmelding("<i>DBclass<i> : fetch_object() : Het was niet mogelijk om van de query een object te vormen, zie het logbestand voor meer informatie.",1);
  332.   }
  333.   RETURN $result;
  334.   }
  335.   catch(Foutmelding $error)
  336.   {
  337.   //
  338.   // Do the error stuff
  339.   //
  340.   $this->sql_error("Fout bij converteren query naar object");
  341.   echo $error;
  342.   }*/
  343. RETURN @mysql_fetch_object($rQuery);
  344. }
  345.  
  346.  
  347.  
  348.  
  349.  
  350.  
  351. //
  352. // Fetch_array()
  353. //
  354. public function fetch_array($rQuery='ding',$result_type=MYSQL_BOTH)
  355. {
  356. //
  357. // Is there a line between the class and the database?
  358. //
  359. $this->is_connected();
  360. //jippie, there is
  361. if ($rQuery==='ding')
  362. {
  363. //
  364. // If no resource query was given, use last executed query.
  365. //
  366. $rQuery=$this->rLastQuery;
  367. }
  368. /* commentaar omdat als je een error gaat gooien je bij while() een 4e result krijgt als er 3 results zijn.
  369.   try
  370.   {
  371.   $result = @mysql_fetch_array($rQuery,$result_type);
  372.   if ($result === FALSE)
  373.   {
  374.   throw new Foutmelding ("<i>DBclass</i> : fetch_array() / fetch_assoc() / fetch_row() : Not able to convert resource into array",1);
  375.   }
  376.   RETURN $result;
  377.   }
  378.   catch(Foutmelding $error)
  379.   {
  380.   $this->sql_error("Fout bij converteren query naar array");
  381.   echo $error;
  382.   }*/
  383. RETURN @mysql_fetch_array($rQuery,$result_type);
  384. }
  385.  
  386.  
  387.  
  388. //
  389. // fetch_assoc() - gives you a beautifull array with required data
  390. //
  391. public function fetch_assoc($rQuery='ding')
  392. {
  393. RETURN $this->fetch_array($rQuery,MYSQL_ASSOC);
  394. }
  395.  
  396.  
  397. //
  398. // Fetch row - gives an array with numeric keys
  399. //
  400. public function fetch_row($rQuery='ding')
  401. {
  402. RETURN $this->fetch_array($rQuery,MYSQL_NUM);
  403. }
  404.  
  405.  
  406.  
  407.  
  408. //
  409. // insert_id - RETURNS LAST INSERTED ID
  410. //
  411. public function insert_id()
  412. {
  413. $this->is_connected();
  414. $ii = @mysql_insert_id();
  415. if (!$ii)
  416. {
  417. $this->sql_error("Kon het laatst ingevoegde id nummer niet detecteren");
  418. RETURN FALSE;
  419. }
  420. else
  421. {
  422. RETURN $ii;
  423. }
  424. }
  425.  
  426.  
  427.  
  428. //
  429. // affected_rows
  430. //
  431. public function affected_rows()
  432. {
  433. $this->is_connected();
  434. $ar = @affected_rows();
  435. if(!$ar)
  436. {
  437. $this->sql_error("Kon het aantal beinvloedde rijen niet tellen");
  438. RETURN FALSE;
  439. }
  440. else
  441. {
  442. RETURN $ar;
  443. }
  444. }
  445.  
  446.  
  447.  
  448. //
  449. // Counts the number of rows of the last SELECT query
  450. //
  451. public function num_rows($rQuery='ding')
  452. {
  453. $this->is_connected();
  454. if ($rQuery='ding')
  455. {
  456. $rQuery = $this->$rLastQuery;
  457. }
  458. try
  459. {
  460. $num = @mysql_num_rows($rQuery);
  461. if ($num === FALSE)
  462. {
  463. throw new Foutmelding ("<i>DBclass</i> : num_rows() : Het aantal rijen konden niet geselecteerd worden");
  464. }
  465. RETURN $num;
  466. }
  467. catch(Foutmelding $error)
  468. {
  469. $this->sql_error("Tellen van rijen uit SELECT mislukt. Zie het logbestand voor meer informatie.",1);
  470. echo $error;
  471. RETURN FALSE;
  472. }
  473. }
  474.  
  475.  
  476. //
  477. // Function to free last result
  478. //
  479. public function free_result()
  480. {
  481. $this->rLastQuery = NULL;
  482. RETURN TRUE;
  483. }
  484.  
  485.  
  486.  
  487.  
  488. //
  489. // Sql_error - shows a nice error and log it to a given file.
  490. //
  491. private function sql_error($sMelding="Geen error vermelding gegeven")
  492. {
  493. //
  494. // Code for a new line and a seperation line
  495. //
  496. $nl ="
  497. ";
  498. $lijn="|-*************************************************************************-|";
  499. //
  500. // Push all possible data in a variable
  501. //
  502. $errorlog = $nl.$lijn.$nl.$nl."General Error information:".$nl.$nl;
  503. #$errorlog .= "Info about last query: ".mysql_info($this->rConnect).$nl;
  504. $errorlog .= "MySQL protocol version: ".mysql_get_proto_info().$nl;
  505. $errorlog .= "MySQL host info: ".mysql_get_host_info().$nl;
  506. $errorlog .= "MySQL Client info: ".mysql_get_client_info().$nl;
  507. $errorlog .= $nl;
  508. $errorlog .= "Info about last query:".$nl;
  509. $errorlog .= "Given reason: ".$sMelding.$nl;
  510. $errorlog .= "Query: ".$this->sLastQuery.$nl;
  511. $errorlog .= "MySQL Error: ".mysql_error().$nl;
  512. $errorlog .= "MySQL ErrorNumber: ".mysql_errno().$nl;
  513. $errorlog .= $nl;
  514. $errorlog .= "MySQL Server stats:".$nl;
  515.  
  516. $mysql_stat = mysql_stat($this->rConnect);
  517. $mysql_stat = $status = explode(' ',$mysql_stat);
  518. foreach($mysql_stat AS $key => $value)
  519. {
  520. $errorlog .= " - ".$value.$nl;
  521. }
  522. $errorlog .= $nl;
  523. $errorlog .= "User information:".$nl;
  524. $errorlog .= "Ip Adress: ".$_SERVER['REMOTE_ADDR'].$nl;
  525. $errorlog .= "Remote host: ".$_SERVER['REMOTE_HOST'].$nl;
  526. $errorlog .= "Referer: ".$_SERVER['HTTP_REFERER'].$nl;
  527. $errorlog .= "Browser/OS: ".$_SERVER['HTTP_USER_AGENT'].$nl;
  528. $errorlog .= "Request page: ".$_SERVER['REQUEST_URI'].$nl;
  529. $errorlog .= "Request Time: ".time().$nl;
  530. $errorlog .= $nl;
  531.  
  532.  
  533. try
  534. {
  535. //
  536. // if log file is not writable
  537. //
  538. if(!is_writable($this->sErrorFile))
  539. {
  540. echo $this->sErrorFile;
  541. //
  542. // Damn, show an error
  543. //
  544. throw new Foutmelding("<i>DBclass</i> : sql_error() : Error bestand is niet beschrijfbaar, geef deze de juiste permissies.",3);
  545. }
  546. //
  547. // Try to write all information to file
  548. //
  549. $fp = fopen($this->sErrorFile, "a");
  550. $fw = fwrite($fp,$errorlog);
  551. fclose($fp);
  552. if($fw===FALSE)
  553. {
  554. //
  555. // Writing didn't work, put error on page
  556. //
  557. throw new Foutmelding("<i>DBclass</i> : sql_error() : Error bestand is wel beschrijfbaar maar de error wegschrijven is mislukt.",3);
  558. }
  559. RETURN TRUE;
  560. }
  561. catch (Foutmelding $error)
  562. {
  563. //
  564. // OOPS, an error occured, print it
  565. //
  566. echo $error;
  567. $error->setShowTrace($this->bShowError);
  568. $error->traceError();
  569. RETURN FALSE;
  570. }
  571.  
  572. }
  573. }
  574.  
  575. ?>


./classes/interface.database.php
  1. <?
  2. interface databaseInterface
  3. {
  4. public function __construct($aConndata,$bError=FALSE);
  5. public function __destruct();
  6. public function get_stats();
  7. public function set_errorfile($sFile="classes/error.database.php",$bCheck=FALSE);
  8. public function query($sQuery, $iImportant=0);
  9. public function fetch_object($rQuery='ding');
  10. public function fetch_array($rQuery='ding',$result_type=MYSQL_BOTH);
  11. public function fetch_row($rQuery='ding');
  12. public function fetch_assoc($rQuery='ding');
  13. public function insert_id();
  14. public function affected_rows();
  15. public function free_result();
  16. }
  17. ?>


./classes/class.foutmelding.php
  1. <?php
  2. include ("classes/interface.foutmelding.php");
  3.  
  4. class Foutmelding extends Exception implements foutmeldingInterface
  5. {
  6. // variabelen initialiseren
  7. protected $sFoutMelding; // string | de geformatteerde output error
  8. private $bShowTrace; // bool | traceErrors aan of uit
  9.  
  10. const NEWLINE = "<br />\n"; // een handige constante
  11.  
  12. public function __construct( $message, $code = 0 )
  13. {
  14. parent::__construct( $message, $code ); // parent constructor initialiseren
  15.  
  16. $this->bShowTrace = false; // standaard geen trace
  17.  
  18. switch ( parent::getCode() ) // maak verschillende errorcodes
  19. {
  20. case 0:
  21. $this->sFoutMelding = '<b>Warning</b>';
  22. break;
  23. case 1:
  24. $this->sFoutMelding = '<b>Common error</b>';
  25. break;
  26. case 2:
  27. $this->sFoutMelding = '<b>User error</b>';
  28. break;
  29. case 3:
  30. $this->sFoutMelding = '<b>Fatal error</b>';
  31. break;
  32. default:
  33. $this->sFoutMelding = '<b>Unknown error</b>';
  34. break;
  35. }
  36.  
  37. $aFatalError = array(1,2);
  38. // als de error fataal is, loggen we m in apache's errorlog
  39. if ( in_array( parent::getCode(), $aFatalError ) )
  40. {
  41. $sLogMessage = $this->message.' in file '.$_SERVER['SCRIPT_NAME'].' on line '.$this->line;
  42. error_log( $sLogMessage );
  43. // in de logfile vinden we dit terug:
  44. // [Sun Feb 06 10:49:52 2005] [error] de opgegeven melding in file /pad/naar/bestand/bestand.php on line xx
  45. }
  46. }
  47. // __toString() is een vaste (overschrijfbare) string output van de melding
  48. public function __toString()
  49. {
  50. $this->sFoutMelding .= ': '.$this->message.self::NEWLINE;
  51. return $this->sFoutMelding;
  52. }
  53.  
  54. // een set-functie om uitgebreide fouten te laten zien.
  55. public function setShowTrace( $pBool )
  56. {
  57. if ( is_bool( $pBool ) )
  58. $this->bShowTrace = $pBool;
  59. }
  60.  
  61. // een eigen functie bakken om een debug_backtrace te doen
  62. public function traceError()
  63. {
  64. if ( $this->bShowTrace == true )
  65. {
  66. foreach ( $this->getTrace() as $aErrorTrace )
  67. {
  68. $aArguments = array();
  69.  
  70. $sFormatErrorString = 'Error thrown in file '.$this->file.' on line '.$this->line.self::NEWLINE.
  71. self::NEWLINE.
  72. 'Error triggered by <b>function '.$aErrorTrace['function'].'('.implode(', ',$aArguments).');</b>'.self::NEWLINE.
  73. 'In file '.$_SERVER['SCRIPT_NAME'].' on line '.$aErrorTrace['line'].self::NEWLINE;
  74. echo $sFormatErrorString;
  75. }
  76. }
  77. }
  78. }
  79. ?>


./classes/interface.foutmelding.php
  1. <?
  2. interface foutmeldingInterface
  3. {
  4. public function __construct($message, $code = 0);
  5. public function __toString();
  6. public function setShowTrace($pBool);
  7. public function traceError();
  8. }
  9. ?>


./classes/error.foutmelding.php
  1. <?
  2. die ("Protected error log");
  3.  
  4. /* Let op, hier eindigd de code


Veel plezier ermee. Download code! Download code (.txt)

Download dit script!
 Stemmen
Niet ingelogd

 Reacties
Post een reactie
Lees de reacties  ( 14 )
© 2002-2012 Sitemasters.be - Regels - Gehost door: Vircon - Laadtijd: 0.372s