» Fatal/Parse Error abfangen und z.B. per E-Mail erhalten

PHPCron - Cronjobs ohne CrontabNeuen Thread eröffnenNeue Antwort erstellenCSV Delimiter ermitteln
AutorNachricht
Administrator 

Name: Marc
Geschlecht:
Anmeldedatum: 28.08.2004
Beiträge: 52421
Wohnort: Lohmar


Meine eBay-Auktionen:
16.02.2015, 20:44
zitieren

Parse Error und diverse Fatal Error lassen sich normalerweise nicht mit register_shutdown_function() abfangen. Es geht schon, aber man muss dazu dieses Konstrukt anwenden:
<?php
error_reporting(-1);
ini_set('display_errors', 1);
register_shutdown_function('error_alert');
function error_alert() {
if(!is_null($e = error_get_last())) {
echo 'error';
}
}
include('content.php');
?>

Wenn nun content.php einen Parse Error enthält, dann wird die Shutdown-Function ausgelöst. Allerdings darf der Fehler nicht in der Datei selbst enthalten sein:
<?php
error_reporting(-1);
ini_set('display_errors', 1);
register_shutdown_function('error_alert');
function error_alert() {
if(!is_null($e = error_get_last())) {
echo 'error';
}
}
// semikolon vergessen:
$foo = 'bar'
?>

Und auch so geht es nicht:
<?php
require('register_shutdown_function.php');
// semikolon vergessen:
$foo = 'bar'
?>

Damit ist es für die meisten Projekte aber bereits nutzlos, weil man ja in der Regel PHP-Dateien so benennt wie sie eingesetzt werden (index.php, article.php, usw.) und nicht eine globale PHP-Datei im Einsatz hat, die andere PHP-Dateien includet.

Trotzdem gibt es eine Lösung. Einfach das hier in der .htaccess einfügen (Pfad natürlich anpassen):
php_value auto_prepend_file /www/register_shutdown_function.php

Nun klappt es sogar beim Aufruf der folgenden Datei:
<?php
// semikolon vergessen:
$foo = 'bar'
?>

Das liegt daran, dass
auto_prepend_file
die
register_shutdown_function.php
vor allen anderen parsed. Und solange in der selbst kein Fehler ist, wird man nun über jeden folgenden informiert.

Damit ist
auto_prepend_file
eine sehr geniale Sache, die eigentlich in keinem PHP Projekt fehlen darf. Denn so kann man eine "register_shutdown_function.php" in wirklich allen PHP Dateien einbinden lassen und muss nicht ständig auf die Pfade achten. Und sollte es eben zu einem Fehler kommen, kann man sich darüber z.B. per E-Mail benachrichtigen lassen.

Hier eine Idee für eine "register_shutdown_function.php":
<?php
// (c) 2015 http://Gutt.IT/
error_reporting(-1);
ini_set('display_errors', 1);
define('WEBMASTER_EMAIL', 'john.doe@example.org');
function error_type($id) {
switch($id) {
case E_ERROR:// 1
return 'E_ERROR';
case E_WARNING:// 2
return 'E_WARNING';
case E_PARSE:// 4
return 'E_PARSE';
case E_NOTICE:// 8
return 'E_NOTICE';
case E_CORE_ERROR:// 16
return 'E_CORE_ERROR';
case E_CORE_WARNING:// 32
return 'E_CORE_WARNING';
case E_COMPILE_ERROR:// 64
return 'E_COMPILE_ERROR';
case E_COMPILE_WARNING:// 128
return 'E_COMPILE_WARNING';
case E_USER_ERROR:// 256
return 'E_USER_ERROR';
case E_USER_WARNING:// 512
return 'E_USER_WARNING';
case E_USER_NOTICE:// 1024
return 'E_USER_NOTICE';
case E_STRICT:// 2048
return 'E_STRICT';
case E_RECOVERABLE_ERROR:// 4096
return 'E_RECOVERABLE_ERROR';
case E_DEPRECATED:// 8192
return 'E_DEPRECATED';
case E_USER_DEPRECATED:// 16384
return 'E_USER_DEPRECATED';
}
return 'UNKNOWN';
}
function error_alert() {
// send alert
if(!is_null($e = error_get_last())) {
$type = error_type($e["type"]);
if (strpos($type, 'ERROR') !== false || strpos($type, 'PARSE') !== false) {
mail(WEBMASTER_EMAIL, $type . ' in ' . $e['file'] . ' at line ' . $e['line'], $e['message']);
}
}
}
register_shutdown_function('error_alert');
if (!isset($_SERVER['DOCUMENT_ROOT']) || $_SERVER['DOCUMENT_ROOT'] === '') {
$_SERVER['DOCUMENT_ROOT'] = substr($_SERVER['SCRIPT_FILENAME'], 0, -strlen($_SERVER['SCRIPT_NAME']));
putenv("DOCUMENT_ROOT={$_SERVER['DOCUMENT_ROOT']}");
}
?>

Wie man sieht setze ich dort auch DOCUMENT_ROOT falls nicht vorhanden (kommt in manchen IIS Konstellationen vor). Viele andere Grundeinstellungen wie MySQL-Login, usw. sind natürlich ebenfalls hier gut einzubinden.


pn email
Gast 
16.02.2015, 20:44
zitieren

Mach mit!

Wenn Dir die Beiträge zum Thread "Fatal/Parse Error abfangen und z.B. per E-Mail erhalten" gefallen haben oder Du noch Fragen hast oder Ergänzungen machen möchtest, solltest Du Dich gleich bei uns anmelden:



Registrierte Mitglieder genießen die folgenden Vorteile:
✔ kostenlose Mitgliedschaft
keine Werbung
✔ direkter Austausch mit Gleichgesinnten
✔ neue Fragen stellen oder Diskussionen starten
✔ schnelle Hilfe bei Problemen
✔ Bilder und Videos hochladen
✔ und vieles mehr...


Neuen Thread eröffnenNeue Antwort erstellen
Ähnliche BeiträgeRe:
Letzter Beitrag
MediaWiki - Fatal error: Memory size
Ich habe seit Tagen ein richtiges Problem: :no: Seit 2 Wochen habe ich eine Wiki bei MediaWiki erstellt, das ging auch gut. Dann wollte ich alle Seiten testen und bei manchen Seiten kam: "Fatal error: Allowed memory size of 33554432 bytes...
von Cpm250
0
208
10.03.2012, 07:50
Cpm250
Mit Preisario jeden Tag Amazon Blitzangebote per E-Mail erhalten
Die Internetseite Preisario bietet die Möglichkeit an, sich jeden Tag eine E-Mail zusenden zu lassen, in der tagesaktuell alle Amazon Angebote aufgelistet werden. Ich nutze diesen Newsletter schon eine Weile und konnte diverse Verbesserungsvorschläge...
von mgutt
0
183
26.11.2014, 16:51
mgutt
Android: Aqua Mail schlechter als K-9 Mail
Hier eine kleine Empfehlung meinerseits. Probiert erst gar nicht Aqua Mail, denn meiner Ansicht nach fehlen zwei wichtige Dinge: 1. Bekommt man so viele Mails wie ich, dann hat man den Sync in aller Regel auf manuell. Leider synct sich Aqua Mail dann...
von mgutt
8
7.522
07.06.2013, 09:18
mgutt
Grafiksignal abfangen?
Hallo, Ich frage mich wie man das Grafiksignal eines Pc's abfangen könne, so wie es Teamviewer auch schafft. Hoffe ihr wisst weiter und gegebenenfalls auch wie man es in c++ realisieren kann. Mit freundlichen...
[Allgemein]von XPoint
4
222
10.11.2011, 18:55
XPoint
2.0 dci 4X4 Motor Drehzahl Signal Abfangen ??
Hallo an alle Kan mir jemand weiter helfen ich will das Motor Drehzahl Signal Abfangen. normaler weise kan man das an der Lima oder an dem Kurbelwellen Nockenwellen Sensorik abfangen kan mir jemand sagen wo Ligen die Kurbel und Noken wellen Sensoren oder...
von kacper
0
218
24.03.2013, 14:01
kacper
Fatal exception of type MWException
Hallo, ich habe mir heute ein Wiki auf einem Webspace von bplaced.net installiert. Allerdings tritt folgendes Problem auf: Wenn ich eine Datei hochladen möchte, kommt folgende Fehlermeldung: Fatal exception of type MWException Was kann man dagegen...
von w.w.17
2
1.282
12.07.2013, 19:48
w.w.17
Fatal exception of type MWException nach php-Update
Hallo mgutt, da Du mir schon einmal super geholfen hast, bin ich glaube ich auch für diese Frage hier bei Dir im Forum richtig. Ich möchte mein mediawiki...
von stefansvw
3
369
15.10.2015, 15:52
stefansvw
E-mail ändern!
ja moin weiß jemand wie man seine angegebene e-mail bei maxrev ändern...
von Schumey
4
199
22.08.2012, 14:21
Schumey
E-Mail Einstellungen
Habe Mediawiki installiert - komme damit ganz gut zurecht; allerdings die E-Mail Einstellungen machen mich fertig. Ich denke es richtig gemacht zu haben, erhalte aber immer die Fehlermeldung: OEFN - Wiki konnte die Bestätigungs-E-Mail nicht an dich...
von Szaivert
0
50
23.05.2021, 09:55
Szaivert
Wiedervorlage per E-Mail?
Hallo, ich wüsste gerne ob es eine Möglichkeit gibt, sich per E-Mail regelmäßig an erstellte Artikel erinnern zu lassen? So eine Art von Wiedervorlage, in der ich einen Zeitraum einstellen kann, nachdem ich per Mail daran erinnert werde, zu schauen ob...
von Sonnenblumenfuchs
1
138
02.02.2017, 07:59
stefahn
© 2004 - 2025 www.programmierer-forum.de | Communities | Impressum |