powie.de Tech Forum

PHP und Webdesign => PHP - Allgemein => Thema gestartet von: k00ni am 29. April 2007, 16:10:47

Titel: Wie behandelt ihr aufkommende Fehler?
Beitrag von: k00ni am 29. April 2007, 16:10:47
Hallo,
mich interessiert, wie ihr in euren Projekten mit auftretenden Fehlern umgeht. Macht ihr dies einfach über if-Anweisungen die true/false behandeln? Oder sendet ihr Fehlerobjekte zurück, die ihr dann später auswertet?
Nun wurde ja in PHP5 das Konstrukt try-catch eingefügt, was sich dafür ja besonders gut eignet.
Ich selbst bin mir noch nicht so sicher, wie ich das mit den lieben Fehlern mach soll. Zur Zeit fahre ich noch die \"einfachste\" Schiene über die if-Anweisung, welche das Resultat (true oder false) einer Funktion abfragt. Sehr sporadisch und äußerst uneffektiv, ich weiß.
@Powie: Ist von deiner Seite etwas geplant? Den scheinbar besitzen viele Funktionen und Anweisungen im pSys, die ich bis jetzt gesichtet habe, keinerlei von Fehlerbehandlung. Nur einfache Abfragen, die prüfen, ob dies oder jenes einen bestimmten Wert etc. besitzt. Wird es in zukünftigen Versionen ein einheitliches Modell geben? Gedanken dazu existieren bestimmt schon.
 
Grüße
Titel: Wie behandelt ihr aufkommende Fehler?
Beitrag von: k00ni am 29. April 2007, 18:14:29
Hallo,
ich finde es ja schön, dass ihr hier abstimmt, aber wenn ihr den Punkt Ich nutze ein eigenes/anderes System... auswählt, dann schreibt bitte noch, was ihr genau implementiert habt, um eure Fehler zu behandeln.
 
Grüße
Titel: Wie behandelt ihr aufkommende Fehler?
Beitrag von: Powie am 29. April 2007, 19:41:59
Ab Version 5 die try/catch Methoden sind angenehm, kenne ich von Delphi her. Bin bisher noch nicht in die Verlegenheit gekommen diese nutzen zu müssen....
Titel: Wie behandelt ihr aufkommende Fehler?
Beitrag von: mahe am 29. April 2007, 21:34:34
Je nachdem was im Fehlerfall passieren soll /uploads/emoticons/icon_e_biggrin.gif.1a84f5257b36e14b36d04985314f877f.gif\" alt=\":-D\" />
Titel: Wie behandelt ihr aufkommende Fehler?
Beitrag von: am 30. April 2007, 13:54:09
Es ist auch wichtig welcher Art der Fehler ist... Oder etwa nicht?
Titel: Wie behandelt ihr aufkommende Fehler?
Beitrag von: k00ni am 30. April 2007, 14:45:33
Es ist auch wichtig welcher Art der Fehler ist... Oder etwa nicht?[/quote]
Ja und?  :ugly:
 
Und dass sich der mahe und der Powie zurückhalten, dass war mir fasst schon klar /uploads/emoticons/icon_e_biggrin.gif.1a84f5257b36e14b36d04985314f877f.gif\" alt=\":-D\" />
Bei meiner Anfrage ist die Art des Fehlers nicht entscheidend, sondern wie man allgemein mit Fehlern umgeht. Es gibt ja nun mehrere Herangehensweisen. Die if-else-Variante geht ja nur, wenn man Zustände abfragt. Also ob eine Funktion true oder false zurückliefert. Oder ob Variable X eine Zahl ist. Und so weiter und so fort.
Per try-catch kann man die Art des Fehler besser abfragen. Denn dort können Fehlerobjekte \"geworfen\" werden, je nach Art können sie anders ausgewertet und auf sie reagiert werden.
Ich habe den Eindruck, als macht ihr euch keine so großen Sorgen, was bei Problemen, die während der Interpretierung eurer Skripte auftreten, so passiert. Entweder wird von vorn herein so programmiert, dass man einfach true-false-Konstrukte anwendet oder umgeht vieles , indem man einfach ein echo mysql_error (); schreibt. Soll der User selbst sehen, was er nun damit macht.
Würde ich so bei C# vorgehen, dann würde das Programm mir nur abschmieren. Ständig Exceptions, die nicht gefangen und verarbeitet werden. Irgendwo tritt immer mal etwas unvorhergesehenes auf: Falscher Datenbankname, Fehler im SQL-Query etc. Wenn man diese Fehler nie abfängt, dann kackt (fast) immer gleich die gesamte Anwendung ab; in PHP hört halt einfach das Skript auf und spuckt nen netten Text aus.
Mir ist ja klar, dass man immer Aufwand mit Nutzen abwiegen muss. Das heißt, dass ich mir bei einem kleinen Schnipselskript keine Fehlerbehandlungsroutine einbaue, die an sich doppelt so groß ist, wie das eigentliche Skript. Aber gerade bei Skripten die mit Datenbanken arbeiten, sollte man dort bestimmte Dinge beachten. Denn PHP gibt allgemeine Meldungen aus, oft auch Teile des SQL-Querys; die könnten dann auch mal sensible Daten enthalten. Und wenn Skripte in großen Portalseiten eingesetzt werden und diese mittendrin wegen eines Fehlers den Arsch hochmachen, dann zerknallts einen das Design oder bricht einfach nur mit einem 3 Zeiler ab.
 
Grüße
Titel: Wie behandelt ihr aufkommende Fehler?
Beitrag von: mahe am 01. Mai 2007, 03:10:04
hier gehts zum OffTopic
Hier bitte nurmehr Beiträge die auch zum Thema passen!
Titel: Wie behandelt ihr aufkommende Fehler?
Beitrag von: raiser am 01. Mai 2007, 04:14:18
und was habt ihr gegen \"bool\" /uploads/emoticons/icon_e_surprised.gif.a8707b3f35a569cb4cfe563fc72ef78d.gif\" alt=\":-o\" />
try - catch, hmmm liest sich gut in der man
aber in php4 möglich?
Titel: Wie behandelt ihr aufkommende Fehler?
Beitrag von: k00ni am 01. Mai 2007, 11:53:45
Hallo,
und was habt ihr gegen \"bool\" /uploads/emoticons/icon_e_surprised.gif.a8707b3f35a569cb4cfe563fc72ef78d.gif\" alt=\":-o\" />try - catch, hmmm liest sich gut in der man
aber in php4 möglich?
[/quote]
mit bool, also einfache Abfragen, ob etwas so oder so ist, kann man schon sehr effektiv arbeiten. Was ist aber, wenn du beispielsweise eine Funktion hast, die dir sagt, ob etwas bspw. in einer Datenbank existiert und dir dann je nachdem, true oder false zurückliefert? An sich sauber, gibt ja nur 2 Möglichkeiten... und wenn dir zwischendurch was mit der Datenbank passiert (Zuviele Verbindungen mit dem Server, keine Zugriff etc.), was dann ? Mir ging es auch um solche Fälle.
 
Grüße
Titel: Wie behandelt ihr aufkommende Fehler?
Beitrag von: am 05. Mai 2007, 19:46:28
Was ist aber, wenn du beispielsweise eine Funktion hast, die dir sagt, ob etwas bspw. in einer Datenbank existiert und dir dann je nachdem, true oder false zurückliefert?[/quote]
Einmal besteht natürlich die Möglichkeit, dass man die Booleans für die Fehlersignalisierung verwendet, für die Angabe, ob ein Eintrag existiert oder nicht, als Integer zurückgibt. Wenn man jetzt noch auf die fehlende Typsicherheit bei PHP achtet, kann man so ziemlich effektiv arbeiten.
Ich verwende aber in größeren Projekten eher Exceptions. In kleineren Projekten arbeite ich mit Error-Handlern, trigger_error() und natürlich Konditionen.
Titel: Wie behandelt ihr aufkommende Fehler?
Beitrag von: sabre am 15. Mai 2007, 21:28:58
Das lästige an der ganzen Sache ist, dass sich fatale Fehler (z.B. memory size exhausted beim Verändern von Grafiken usw.) nicht abfangen lassen. Gerade da, wo man es wirklich brauchen könnte :-/
Titel: Wie behandelt ihr aufkommende Fehler?
Beitrag von: k00ni am 15. Mai 2007, 22:53:45
Hallo,
wird dass nicht über ein
 

catch (Exception $excep)
{
...
}

 
 
gefangen? An sich müsste dieser Konstruktur jede Art von Fehlern abfangen.
Titel: Wie behandelt ihr aufkommende Fehler?
Beitrag von: sabre am 16. Mai 2007, 15:43:10
Leider nicht. Falls doch, dann wüsste ich gerne wie /uploads/emoticons/icon_e_smile.gif.f7ec63a2b1c3d90a9415e40455642502.gif\" alt=\":-)\" />
Titel: Wie behandelt ihr aufkommende Fehler?
Beitrag von: k00ni am 16. Mai 2007, 17:01:59
Na wenn du den Code, wo deine Grafikroutinen drin stehen, hier rein schreibst, dürfte es theoretisch funktionieren.
 

try
{
// hier deine Grafikroutinen
}
catch (Exception $Exception)
{
echo $Exception;
}

 
 
Ich bin das nur aus C# gewöhnt, da wird alles abgefangen. Hierbei wird aus Exception eine Art Kontainer, wo alle Arten von Fehlern, die auftreten, reingepackt werden.
Wie gesagt, reine Vermutung. /uploads/emoticons/icon_e_smile.gif.f7ec63a2b1c3d90a9415e40455642502.gif\" alt=\":-)\" />
Titel: Wie behandelt ihr aufkommende Fehler?
Beitrag von: am 18. Mai 2007, 20:58:45
Es gibt ein paar Randbedingungen, bei deren Auftreten Exception-Handling nicht funktioniert. Beispielsweise wenn man versucht, eine nichtvorhandene Datei unter Windows zu inkludieren und diesen Fehler mit try..catch abzufangen versucht.
Ebenso könnte ich mir vorstellen, dass wenn PHP der Speicher oder die Laufzeit ausgeht, kein Exception-Handling mehr durchgeführt wird. Daran sieht man schön, wie kaputt das Konzept, Laufzeit- und Speicherbeschränkung von dem Interpreter selbst verwalten zu lassen, ist.
\"Nobody trusts those fuckers,  you know that. Every Al ever built has an electromagnetic shotgun wired to its forehead.\"[/quote]
Titel: Wie behandelt ihr aufkommende Fehler?
Beitrag von: k00ni am 05. Juni 2007, 21:54:14
Nabend,
wie sieht es aus, wenn man einfach jede Funktion einen Text, eine Art Bericht zurückliefern lässt. Man könnte ihn dann checken und dann wenn er ungleich true ist, einfach ausgeben.
 

 
Bei kleinen Projekten und wenig Fehlerfällen bestimmt interessant. Denn es ist sehr simpel und der Programmierer brauch sich keine Sorgen um den Fehler machen, denn die Funktion gibt auf den Fehler zugeschnittene Meldungen zurück. Natürlich nur, wenn diese vorher auch so implementiert wurden. /uploads/emoticons/icon_e_wink.gif.3167d127940f44558fbf1ccd9b6d60a9.gif\" alt=\";-)\" />
Gedanken dazu?
Titel: Wie behandelt ihr aufkommende Fehler?
Beitrag von: am 06. Juni 2007, 11:28:53
Warum nimmst Du da nicht gleich trigger_errror()? Dort kannst Du einerseits einen Fehlertext angeben, andererseits auch die Art des Fehlers definieren (Notice, Warning oder Fatal).
Du übersiehst außerdem, dass Du, wenn Du Fehlermeldungen einfach mit echo ausgibst, die entsprechenden Settings in PHP übergehst. So würden Fehlermeldungen selbst dann ausgegeben, wenn man display_errors auf Off gestellt hat. Außerdem werden Fehler nicht geloggt. Und ja, es gibt sehr gute Gründe dafür, display_errors zu deaktivieren. die() ist übrigens auch noch so eine Funktion, auf die man tunlichst verzichten sollte.
 
Nochmal zusammengefasst:
In größeren Projekten - also pi mal Daumen ab 100 Zeilen Code - sollte man sowieso PHP5 und damit auch Exceptions verwenden. Ansonsten unbedingt über trigger_error() das PHP-Fehlermanagement antriggern. Es kann nicht schaden, die Doku zu den eigenen Fehlerhandlern zu lesen.
Titel: Wie behandelt ihr aufkommende Fehler?
Beitrag von: k00ni am 06. Juni 2007, 11:31:27
Hallo,
was du sagst, leuchtet mir ein. Ich habe ehrlich gesagt bis gerade eben noch nichts von trigger_error gehört. Werde mir das aber später noch einmal anschauen.
die() ist übrigens auch noch so eine Funktion, auf die man tunlichst verzichten sollte.[/quote]
Was meinst du damit?
Titel: Wie behandelt ihr aufkommende Fehler?
Beitrag von: am 06. Juni 2007, 11:47:27
Insofern, als dass damit eben das Skript sofort abgebrochen wird (ja, register_shutdown_function ist mir bekannt). Dies ist aber gar nicht immer die adäquate Reaktion auf einen Fehler. Auch für die/exit gilt, dass der übergebene String einfach ohne weiteres ausgegeben wird - also auch wieder kein PHP-Fehlermanagement.
Prinzipiell sollte Fehlermanagement so intelligent sein und bei kritischen Fehlern die Verarbeitung in einem definierten Zustand beenden: Beispielsweise nachdem Datenbankverbindungen getrennt und nicht mehr benötigte Daten freigegeben wurden.