duckduckgo
Diese Verbindung ist mit SSL verschlüsselt

tags: news software php opensource webdesign howto


17.Mar.2016 14:56 - zuletzt aktualisiert: 21.Feb.2017 14:14

PHP Fehlermeldungen steuern

Ich hatte jüngst das Problem, daß ich, um Fehlern auf die Spur zu kommen, auf meinem hosted bzw shared Server Fehlermeldungen brauchte, um meine neuesten Skripte zu entfehlern. Das hat natürlich den faden Beigeschmack, daß auf der gesamten Seite nun Warnungen und Fehlermeldungen aktiviert waren. Nun fand ich bei php.net die Funktion "error_reporting". Schönes Ding! Nun läßt sich für jedes Skript die Fehlermeldung haarklein einstellen! Z.Bsp. so hier:

<?php
if ($_GET["debug"] == "TRUE")
  {
   ini_set("display_errors", 1);
  }
else
  {
   ini_set("display_errors", 0);
  }
error_reporting(E_ALL & ~E_NOTICE);
ini_set("log_errors", 1);
ini_set("error_log", "/path/to/php-error.log");
?>

Also, das E_ALL steht für: alles ausgeben, was an Hinweisen, Warnungen und Fehler so kommt.
& ~E_NOTICE bedeutet soviel wie "außer Hinweise". Also im Zusammenhang gibt die Zeile "error_reporting(E_ALL & ~E_NOTICE);" an: Zeige alles, außer Hinweise!
Das ini_set("display_errors", 0); ist so etwas wie ein Hauptschalter. "Anzeige von Fehlern an(1)/aus(0)".
log_errors bzw error_log behandelt das loggen von Fehlern in einer Logdatei...

Ich hoffe, das erspart jemandem die Zeit, lange danach zu suchen! :o)

Happy scripting!

Vielen Dank an Jörg, für das Beispiel mit den error-logs!

Creative Commons Lizenzvertrag
Dieses Werk ist lizenziert unter einer
Creative Commons Namensnennung 4.0 International Lizenz .

Kommentare

1) Jörg

17.Mar.2016 18:46

Bei einer produktiven Website kann es auch sinnvoll sein, display_errors zwar auf 0 zu setzen, aber nicht den Error Level, und die Fehler dann zu loggen - dazu muss die Direktive log_errors auf 1 eingesetzt werden. Mit der Direktive error_log kann man auch die Datei festlegen, in welche geloggt werden soll. Beispiel:

else
{
ini_set("display_errors", 0);
ini_set("log_errors", 1);
ini_set("error_log", "/path/to/php-error.log");
}

2) Jörg

17.Mar.2016 18:55

Zu früh abgeschickt... :)

Das "else {" und "}" muss natürlich noch raus...

3) chris_blues

18.Mar.2016 13:50

Guter Tipp! Danke! :o)
Hast Du was dagegen, wenn ich das noch in das obige Beispiel einbaue?

4) Anonymous

18.Mar.2016 14:50

Zumindest unter nginx und wahrscheinlich auch unter apache kann man einzelne PHP Einstellung auch pro Virtuell Host verändern.
Stichworte sind php_admin_flag und php_admin_value ...

;-)

5) chris_blues

18.Mar.2016 14:53

Naja, an solche administrativen Einstellungen komme ich bei meinem hosted Server nicht ran... Oder meinst Du das als .htaccess-Direktive? Die sind bei mir auch alle gescheitert (Error 500).

6) Jörg

19.Mar.2016 13:27

Du kannst den Code gerne in dein Beispiel einbauen

In der .htaccess Datei funktionieren nur die Direktiven php_value und php_flag und dies auch nur, wenn sie für den betreffenden VirtualHost erlaubt sind ("AllowOverride Options" oder "AllowOverride All")

7) Jörg

21.Mar.2016 11:15

Noch eine Korrektur :)

error_reporting sollte nicht auf 0 gesetzt werden - sonst wird ja nichts geloggt - ich würde error_reporting deswegen auch außerhalb des if Konstrukts definieren:



So werden grundsätzlich alle Fehler außer die Notices geloggt, und wenn ?debug=TRUE an die URL gehangen wird, werden diese Fehlermeldungen zusätzlich auf der Seite ausgegeben

8) Jörg

21.Mar.2016 11:19

Der Code wurde in meinem letzten Beitrag verschluckt - ich hoffe ohne PHP-Tags wird dieser angezeigt:

if ($_GET["debug"] == "TRUE")
{
ini_set("display_errors", 1);
}
else
{
ini_set("display_errors", 0);
}

error_reporting(E_ALL & ~E_NOTICE);
ini_set("log_errors", 1);
ini_set("error_log", "/path/to/php-error.log");

9) chris_blues

21.Mar.2016 13:36

Ja, ist mir auch schon aufgefallen, hab mich aber noch nicht drum gekümmert.

Hihi, da hat strip_tags ja sehr gründlich zugeschlagen! Muß ich ihm mal abgewöhnen.

Danke für die guten Tips!

10) Torben

22.Mar.2016 11:11

Moin,

es gibt noch einige Fehlerausgaben mehr die sich steuern lassen:
http://php.net/manual/de/errorfunc.configuration.php
Wenn du also detailierte Meldungen haben möchtest, dann lässt sich das auch umsetzen. :)
Name: (optional)

leer lassen

Benachrichtigen: (optional, um zu neuen Kommentaren benachrichtigt zu werden)

Website: (optional)

Ihr Kommentar
😀😁😂😃😄😅😆😇😈😉😊😋😌😍😎😏😐😑😒😓😔😕😖😗😘😙😚😛😜😝😞😟😠😡😢😣😤😥😦😧😨😩😪😫😬😭😮😯😰😱😲😳😴😵😶😷🙁🙂🙃🙄🙅🙆🙇🙈🙉🙊🙋🙌🙍🙎🤐🤑🤒🤓🤔🤕🤖🤗🤘🤠🤡🤢🤣🤤🤥🤦🤧𝄞🌍🌹🍻🍾