www.PHP-Kurs.com

PHP lernen für Einsteiger
und Fortgeschrittene

PHP-Tutorial mit Videos

Sie befinden sich: Startseite » Impressum » Fehler Management

Fehler Management

AUS: http://www.php-dummies.de/script/Tutorials/Fortgeschritten/Error_Management/Fehler_Logbuch.html

Tutorials - Fortgeschritten - Error Management - Fehlermeldungen on - off

Tutorials - Fortgeschritten
Error Management: Fehlermeldungen on - off
Fehlermeldungen on - offFehler Logbuch
Welche Fehler PHP anzeigt, kann man selbst bestimmen.
Dazu gibt es die Funktion error_reporting( what ).
Die Standard-PHP-Einstellung (in der php.ini vordefiniert) entspricht:
<?php
error_reporting(E_ALL ^ E_NOTICE);
?>
Übersetzt: Reportiere alle Fehler, ausser E_NOTICE, also PHP-Anmerkungen.
Diese Anmerkungen sind eigentlich schon irgendwo gut gemeint, aber eben doch "lästig", denn sie merken alles an, was nicht 100% schön programmiert ist.
Also weg damit.
<?php
error_reporting(NULL);
?>
Dieser Modus würde bewirken, dass gar keine Fehler mehr ausgegeben werden.
Bei schwerwiegenden Fehlern wird das Script dennoch abgebrochen.
Nur erhält der Besucher keine für ihn unnötige Fehlermeldung.
Das ist an sich gut. Aber nicht ganz - denn du erhältst auch keine Möglichkeit, zu sehen, was du da falsch programmiert hast.
Also sollte error_reporting(E_ALL ^ E_NOTICE) deine Wahl sein.

Was es alles für Fehlertypen für error_reporting( what ) gibt, die es einzeln ein- und auszuschalten gibt, steht auf der Manualseite auf php.net
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 */
?>
ausführen ausführen (HTML-Code anzeigen)
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;
?>
ausführen ausführen (HTML-Code anzeigen)

Wenn Sie einen Fehler finden, bitte mitteilen (egal ob Schreibfehler oder inhaltlicher Fehler).

Mit Maus fehlerhafte Stelle markieren und übernehmen mit folgendem Button:



(kann angegeben werden)

Nach Absenden kommt hier Feedback! Bitte nicht doppelt absenden. Danke.

Bitte unterstützen Sie dieses Projekt

Sie können dieses Projekt in verschiedenen Formen unterstützen - wir würden uns freuen und es würde uns für weitere Inhalte motivieren :).

unsere Videos bestellen

Unsere Videos und eBooks bestellen.

Spenden

Sie können uns eine Spende über PayPal zukommen lassen.

Weiterempfehlungen

Empfehlen Sie es weiter - wir freuen uns immer über Links und Facebook-Empfehlungen.

Bücher über Amazon

Bestellen Sie Bücher über folgende Links bei Amazon:

Fehler melden

Vielen Dank für Ihre Hilfe