Stoppen Sie die Skriptausführung nach Benachrichtigung / Warnung
Ist es möglich, PHP-stop Ausführung auf eine Mitteilung/Warnung, weltweit?
Führen wir einen Entwicklungs-server mit einer Menge von Websites auf, wollen aber die Kraft unserer Entwickler, diese zu beheben, Warnungen/Hinweise (oder bitten Sie um Hilfe mit Ihnen zumindest), anstatt zu ignorieren und weitergehen.
InformationsquelleAutor der Frage Michael | 2012-05-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, es ist möglich. Diese Frage spricht für die allgemeinere Frage auf, wie die Behandlung von Fehlern in PHP. Sollten Sie definieren und registrieren eines benutzerdefinierten error-handler mit
set_error_handler
docs anpassen handling für PHP-Fehler.IMHO ist es am besten, um eine exception zu werfen, die auf jeder PHP-error und try/catch-Blöcke, um den Programmablauf Steuern, aber die Meinungen unterscheiden sich in diesem Punkt.
Erreichen der OP erklärte Ziel, das Sie tun könnten, so etwas wie:
Der obige code löst eine
ErrorException
jederzeit einE_NOTICE
oderE_WARNING
angehoben wird, wirksam beenden Ausgabe des Skripts (wenn die Ausnahme nicht abgefangen wird). Werfen von exceptions in PHP-Fehler ist am besten in Kombination mit einem parallel-exception handling-Strategie (set_exception_handler
) ordnungsgemäß beendet in Produktionsumgebungen.Beachten Sie, dass das obige Beispiel nicht hinsichtlich der
@
Fehler Unterdrückung Betreiber. Wenn dies für Sie wichtig ist, fügen Sie einfach ein Kontrollkästchen mit demerror_reporting()
- Funktion wie hier gezeigt:InformationsquelleAutor der Antwort rdlowrey
Kann man Global konfigurieren Sie diese in Ihrem php.ini-DateiDocs.
Sie tun dies durch die Angabe einer Datei, die eingefügt wird, indem alle PHP-Prozesse mit der
auto_prepend_file
- DirektiveDocs:Tun, die im inneren der globalen php.ini-Datei wird sichergestellt, dass der code innerhalb der prepend-Datei wird immer exectued. Sie können es verwenden, dann registrieren Sie einen globalen error-handler schalten Sie alle Fehler in exceptionsDocs:
Dieses kleine Skript schaltet alle Fehler/warnings/notices usw.. in einer
ErrorException
.Kombinieren Sie es mit der
error_reporting
- ini-DirektiveDocs, die Werte beschreiben in Ihrer php.ini-Datei.Werfen eine Ausnahme ist eine sehr strenge Sache. Ihr Programmierer wird gezwungen sein, sich mit Warnungen und Fehler, die sonst der code nicht funktioniert nicht.
Wahrscheinlich ist dies zu viel für Ihre Programmierer und gesellschaftlich nicht akzeptabel innerhalb Ihres Unternehmens. Stattdessen können Sie auch melden Sie alle Fehler, und fügen Sie am Ende der Ausgabe (oder an der Spitze, so ist es besser sichtbar) durch die Verwendung von output buffering.
Ist eine alternative zum protokollieren von Fehlern und Warnungen im logfile und überwachen Sie dann die Datei mit einem anderen Prozess und aggregieren der Informationen. Sie können eine Anzeigetafel, die zeigt die Anzahl der Warnungen pro Anwendung und machen diese sichtbar im Büro, damit jeder sieht, wie gut ein team führt oder etwas Spaß, wie die.
Was ich zu sagen versuche, ist: Neben dem technischen problem, es ist ein Soziales problem, das Sie benötigen, um kreative und eigentlich sprechen Sie das problem aus Ihrer Entwickler. Sie müssen deutlich machen, warum es wichtig ist, Behebung von Warnungen und Fehlern und wie Ihre Codierung und Fähigkeiten profitieren.
InformationsquelleAutor der Antwort hakre
Seit PHP 5.3.0:
InformationsquelleAutor der Antwort Tiberiu-Ionuț Stan
Wenn Sie in einer Entwicklungsumgebung, die Sie möglicherweise erwägen Sie die Installation von dem Modul Xdebug und setzen
xdebug.halt_level=E_WARNING|E_NOTICE|E_USER_WARNING|E_USER_NOTICE
irgendwo in deinen PHP-ini-Dateien. Der Entwickler kann zurückgesetztxdebug.halt_level
, aber wir haben das gleiche Problem mit der Antwort aufset_error_handler
, weil wir wiederherstellen können, die der Hundeführer auf seinen ursprünglichen Wert.InformationsquelleAutor der Antwort
Den anderen Lösungen bei der Implementierung einer benutzerdefinierten error-handler, die überschreibt den Standard-Fehler-logging-Mechanismus. Das bedeutet, wenn wir festlegen einer benutzerdefinierten error-handler, der Hinweis /die Warnung wird nicht mehr gedruckt in der Standard-Weg, also ändern wir mehr als nur "stop Skript-Ausführung nach Benachrichtigung /Warnung".
Aber ich brauchte einen Weg, um noch die Nachricht drucken - in meinem Fall in PHP-CLI - da die Ausgabe wird dann analysiert durch ein anderes Programm. Also ich wollte nicht die Nachricht drucken in irgendeiner Weise aber in der exakt gleichen Art und Weise als PHP tut es in der Regel. Ich nur wollte stop das PHP-CLI-Prozess mit einem exit-code von
!= 0
Recht nach einem Hinweis /Warnung gedruckt wurde, und tun nicht ändern, alles andere.Leider, es scheint nicht zu einem Standard-Weg, beenden Sie das Skript ohne änderung die ganze Fehlerbehandlung. So musste ich implementieren Sie die Standard-Fehler-handler (implementiert in C) in PHP.
Dafür sah ich in der Standard-Fehler-Druck-Mechanismus in der PHP-Quellcode und portierte die relevanten Teile von C zu PHP zu bekommen, der folgenden Fehler-handler, die ich mit Ihnen teilen möchte, in Fall müssen Sie etwas ähnliches:
InformationsquelleAutor der Antwort leemes
Kann man wiederum auf die error_reporting zu E_ALL in der PHP-Konfigurationsdatei des Servers.
In PHP 5 ein neues error level E_STRICT verfügbar ist. Als E_STRICT ist nicht enthalten innerhalb E_ALL Sie explizit aktivieren Sie diese Art von Fehler Ebene. Aktivieren E_STRICT während der Entwicklung hat einige Vorteile. STRENGE Nachrichten wird Ihnen helfen, die Verwendung der neuesten und größten vorgeschlagene Methode der Codierung, die zum Beispiel warnen, Sie über die Verwendung von deprecated Funktionen.
Referenz: Die PHP-Konfiguration-Manual
Folgende Einstellungen führen Sie die Ausgabe aller Fehler in einem Skript. Bitte beachten Sie, dass diese müssen einbezogen werden in die start von Ihrem Skript-Dateien.
InformationsquelleAutor der Antwort Jose Philip Raja