Blog

tags: news software php opensource webdesign howto


17.Mar.2016 14:56 - last update: 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!




comments

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. :)

post a comment








โ˜บโ˜น๐Ÿ˜€๐Ÿ˜๐Ÿ˜‚๐Ÿ˜ƒ๐Ÿ˜„๐Ÿ˜…๐Ÿ˜†๐Ÿ˜‡๐Ÿ˜ˆ๐Ÿ˜‰๐Ÿ˜Š๐Ÿ˜‹๐Ÿ˜Œ๐Ÿ˜๐Ÿ˜Ž๐Ÿ˜๐Ÿ˜๐Ÿ˜‘๐Ÿ˜’๐Ÿ˜“๐Ÿ˜”๐Ÿ˜•๐Ÿ˜–๐Ÿ˜—๐Ÿ˜˜๐Ÿ˜™๐Ÿ˜š๐Ÿ˜›๐Ÿ˜œ๐Ÿ˜๐Ÿ˜ž๐Ÿ˜Ÿ๐Ÿ˜ ๐Ÿ˜ก๐Ÿ˜ข๐Ÿ˜ฃ๐Ÿ˜ค๐Ÿ˜ฅ๐Ÿ˜ฆ๐Ÿ˜ง๐Ÿ˜จ๐Ÿ˜ฉ๐Ÿ˜ช๐Ÿ˜ซ๐Ÿ˜ฌ๐Ÿ˜ญ๐Ÿ˜ฎ๐Ÿ˜ฏ๐Ÿ˜ฐ๐Ÿ˜ฑ๐Ÿ˜ฒ๐Ÿ˜ณ๐Ÿ˜ด๐Ÿ˜ต๐Ÿ˜ถ๐Ÿ˜ท๐Ÿ™๐Ÿ™‚๐Ÿ™ƒ๐Ÿ™„๐Ÿ™…๐Ÿ™†๐Ÿ™‡๐Ÿ™ˆ๐Ÿ™‰๐Ÿ™Š๐Ÿ™‹๐Ÿ™Œ๐Ÿ™๐Ÿ™Ž๐Ÿค๐Ÿค‘๐Ÿค’๐Ÿค“๐Ÿค”๐Ÿค•๐Ÿค–๐Ÿค—๐Ÿค˜๐Ÿค ๐Ÿคก๐Ÿคข๐Ÿคฃ๐Ÿคค๐Ÿคฅ๐Ÿคฆ๐Ÿคงโ™ฝโš โœŒโœ”โžœ๐„ž๐ŸŒ๐ŸŒน๐Ÿป๐Ÿพโ˜žโ˜ โ˜•โ˜ขโ˜ฎโ˜ฏ

privacy declaration

Your IP-address, useragent-string etc are not stored by this blog-software. Still, it is possible that the hoster of this website may store data like this. But that is beyond the scope of this blog-software. Check out this website's privacy declaration to find out more about that!

This blog-software generally doesn't store any information about you. Only if you post a comment, some data will have to be stored. You don't have to input any personal information here. Except for the comment itself, all fields are optional!
If you don't want to tells us your name, that's fine. It will be shown as 'anonymous'.
If you want to receive notifications on following comments, naturally you'll have to give us your email address. It will be stored and not be shared with anybody. If you don't want to be notified, just leave the notifications field empty.
If you want your name to be linked to your website, you'll have to give us your site's address. Otherwise leave this field empty.

This data will be stored in case you decide to post a comment here:

  • time and date of your post
  • your name (if supplied)
  • your email (if supplied)
  • your website (if supplied)
  • your comment
  • some technical information unrelated to you, like which blogpost this comment belongs to and a unique id for this comment