burghi'sphp-dummies.de
PHP für Einsteiger und Fortgeschrittenere - an laufenden Scripten erklärt
10.09.2010, 03:24 Uhr - Impressum

Tutorials - Fortgeschritten - Error Management - Fehler Logbuch

Tutorials - Fortgeschritten
Error Management: Fehler Logbuch
error_reporting( NULL ) schaltet generell jede Form von Fehleranzeige aus.
Und nicht nur das, jegliche Fehlerbehandlung wird unmöglich gemacht.
Auch eventuellen mitloggen oder so...
Is doof.
Besser:
<?php
ini_set("display_errors", 0);
?>
Dies wäre die ideale Einstellung ab dem Zeitpunkt, ab dem die Page online steht.
Fehler werden nicht mehr angezeigt, aber du kannst trotzdem sehen, was für Fehler du gemacht hast:
Und dadefür bräuchtest am besten eine Datei, wo alles mitgeloggt wird.
Is sogar einfacher als gedacht:
<?php
ini_set("log_errors", 1);     /* Logging "an" schalten */
ini_set("error_log", $_SERVER['DOCUMENT_ROOT'] . "/errorlog.txt");     /* Log-Datei angeben */
?>
Diese Zeilen zusammen am Anfang deiner Scripte eingefügt - am besten in eine Datei "errorlog.php" schmeissen und includen - und die Sache läuft.
Ab sofort werden die Fehler in der Datei ".../errorlog.txt" gesammelt.
Die Datei muss nicht existieren, sie wird von allein angelegt.

Also insgesamt:
benutzte Codefiles errorlog.php
<?php
include("errorlog.php");
echo "Wir erzeugen einen Fehler...";

dieseFunktionGibtsNicht("blah");     /* müsste eigentlich einen Fehler geben */

echo "Das Script läuft nicht bis hierher... wird durch den Fehler abgebrochen";     /* wird nicht mehr ausgegeben */
?>
Wird aber kein Fehler angezeigt ;-)
Aber die Datei errorlog.txt hat nun folgenden Eintrag:

[29-Mar-2006 16:48:52] PHP Fatal error:  Call to undefined function dieseFunktionGibtsNicht() in script.php on line 2


Schick. Und kein Besucher wird mit PHP-Gebrabbel genervt.
Apropos "schick"...
Ein paar Zeilen in der errorlog.php hinzugefügt und du bekommst die logdatei immer gleich zugemailt, wenn deine Page Script entdeckt, dass ein Fehler drinsteht:
<?php
$errorlogfile = $_SERVER['DOCUMENT_ROOT'] . "/errorlog.txt";

ini_set("display_errors", 0);
ini_set("log_errors", 1);
ini_set("error_log", $errorlogfile);

if(file_exists($errorlogfile)) {
     $errors = file_get_contents($errorlogfile);     /* Inhalt wird gelesen */
     @unlink($errorlogfile);     /* Datei wird gelöscht */
     mail("meine@email.de", "ERROR-LOG $_SERVER[HTTP_HOST]", $errors);     /* Mail wird gesendet */
}

?>
Kann erlaubt dir das überhaupt dein Server?
Das kannst du mit diesem kurzen Script testen:
<?php
$ini = ini_get_all();
$check = array("display_errors", "log_errors", "error_log");
foreach($check as $iniset) {
     $access = $ini[$iniset]['access'];
     echo "<b>$iniset ändern:</b><br />\n";
     if($access == 7) echo "ja, überall (per per ini_set(), php.ini, .htaccess oder httpd.conf)<br />\n";
     elseif($access == 0) echo "nein, nicht änderbar<br />\n";
     else {
          if($access & 1) echo "ja, per ini_set()<br />\n";
          if($access & 2) echo "ja, per php.ini, .htaccess oder httpd.conf<br />\n";
          if($access & 4) echo "ja, per php.ini oder httpd.conf<br />\n";
     }
     echo "<br /><br />";
}

exit;
?>
© 2004-2005 - Impressum