2009-08-14 10 views
1

Lassen Sie sich sagen, dass ich eine Live Seite im Grunde bin vererben, die eine Menge von Fehlern in der Produktion hat, ich mache im Grunde eine Umkodierung dieser gesamten Seite, die nehmen könnte einen Monat oder so.Fehler jenseits Einstellung error_reporting Unterdrückende (display_errors vielleicht?)

Es gibt einige Fälle, in denen diese Site auf externen XML-Dateifeeds angewiesen war, die nicht mehr vorhanden sind, aber der Code nicht ordnungsgemäß eingerichtet wurde, um eine nette saubere Fehlermeldung zu liefern (es gibt verschiedene ähnliche Umstände) - der Client fordert, dass zumindest diese Fehlermeldungen verschwinden, auch wenn zum Beispiel der Inhalt der XML-Datei nicht veröffentlicht wird, so dass wir keine PHP-Fehler und einen leeren Bereich auf der Seite sehen (so dass der Rest der Seite aussehen kann) gut ").

An einem Punkt habe ich von jemandem gehört set_error_handler mit einigen Fällen zunichte zu machen, wo es nicht extreme ist, und ich hatte die Idee, es der Einrichtung Fehlermeldungen in einer Datei speichern/log oder per e-Mail (und versuchen, keine doppelten Fehlermeldungen zu haben), damit Endbenutzer diese hässlichen Dinge nicht sehen müssen.

Ich bin auf der Suche nach Tipps von jedem, der dies tatsächlich getan hat, also vielen Dank im Voraus.

Antwort

3

Wenn in der Entwicklung, ist es gut,

error_reporting(E_ALL); 
ini_set('display_errors', 'On'); 

verwenden So können Sie Fehler sehen sofort: es hilft, sie zu korrigieren.


Wenn auf dem Produktionsserver, Sie nicht angezeigt Fehler wollen, so:

ini_set('display_errors', 'Off'); 

error_reporting kann aktiviert bleiben: wenn display_errors ausgeschaltet ist, werden Fehler ohnehin nicht angezeigt werden - aber Sie kann sie trotzdem in einer Datei protokolliert haben.


BTW, diese können in der PHP eingestellt werden.ini-Datei, natürlich:


auf der Produktionsmaschine, möchten Sie vielleicht log_errors und error_log verwenden, so Fehler in einer Datei protokolliert werden (was bedeutet, Sie werden wissen können, welche Fehler aufgetreten sind - manchmal nützlich.; Natürlich, vergiss nicht, diese Datei von Zeit zu Zeit zu überprüfen ;-).


Als Nebenbei bemerkt, wenn Sie nur ein paar Funktionen/Methoden, die Sie wollen keine Fehler angezeigt werden, könnten Sie die @ operator vorstellen verwenden nur die Fehler zu maskieren diejenigen auslösen könnten ...

. .. Aber ich rate dringend davon ab (außer in ganz bestimmten Fällen): es macht das Debuggen viel schwerer: Fehler, die dort ausgelöst werden, werden nie angezeigt, nicht einmal auf Ihrem Entwicklungsrechner!

Meiner Meinung nach ist es viel besser, nur display_errors auf der Produktionsmaschine zu deaktivieren; Es bedeutet auch, dass überhaupt kein Fehler angezeigt wird, was für die Benutzer besser ist!

4

auf dem Produktionsserver, sollten Sie die folgenden ini Einstellungen haben:

ini_set('error_reporting', E_ALL | E_STRICT); 
ini_set('log_errors', true); 
ini_set('error_log', '/tmp/php_errors.log'); // or whatever file is appropriate 
ini_set('display_errors', false); 

Durch display_errors Ausschalten Ihre Benutzer nie wieder eine Fehlermeldung sehen, aber Sie in der Lage, Fehlermeldungen zu sehen von in der Protokolldatei suchen.

Wenn der Re-Code abgeschlossen ist, sollten keine weiteren Fehler in die Protokolldatei gelangen (weil Sie alle Fehler behoben haben).

Bearbeiten: Einige Entwickler setzen error_reporting auf E_ALL^E_NOTICE als eine Möglichkeit zum Verbergen von Fehlern. Dies ist eine schlechte Vorgehensweise, weil es Meldungen über mögliche Programmierfehler verbirgt. Sie sollten nur verwenden E_ALL^E_NOTICE, wenn es so viele Hinweise aus Legacy-Code, dass Sie nicht alle beheben können.

Verwandte Themen