Signatur
Beschreibung
$php_errormsg ist eine Variable (keine echte Superglobale), die automatisch von PHP befüllt wird, sobald ein Laufzeitfehler oder eine Warnung auftritt – vorausgesetzt, die Direktive track_errors ist in der php.ini auf On gesetzt. Sie enthält stets die zuletzt aufgetretene Fehlermeldung als Zeichenkette.
Im Gegensatz zu echten Superglobalen wie $_GET ist $php_errormsg gültigkeitsbereichgebunden: Sie ist nur in dem Scope verfügbar, in dem der Fehler aufgetreten ist. In Funktionen oder Methoden muss sie daher gegebenenfalls mit global $php_errormsg importiert werden.
Typischerweise wird $php_errormsg in Kombination mit dem Fehlerunterdrückungsoperator @ eingesetzt: Ein Funktionsaufruf wird mit @ präfixiert, um die Standard-Fehlerausgabe zu unterdrücken, und anschließend wird $php_errormsg ausgewertet, um den Fehler programmatisch zu behandeln.
Wichtig: $php_errormsg wurde in PHP 7.2 als deprecated markiert und in PHP 8.0 vollständig entfernt. Als Ersatz sollte error_get_last() verwendet werden, die unabhängig von track_errors und ohne Gültigkeitsbereichsprobleme funktioniert.
Beispiele
Fehlermeldung nach fehlgeschlagenem Datei-Öffnen auswerten
<?php
// Nur bis PHP 7.x – track_errors muss in php.ini aktiv sein
ini_set('track_errors', '1');
$handle = @fopen('/nichtvorhandene/datei.txt', 'r');
if ($handle === false) {
echo 'Fehler: ' . $php_errormsg;
} else {
fclose($handle);
}
Moderne Alternative mit error_get_last() (PHP 5.2+ / 8.0+)
<?php
// Empfohlene Vorgehensweise ab PHP 8.0 (Ersatz für $php_errormsg)
$handle = @fopen('/nichtvorhandene/datei.txt', 'r');
if ($handle === false) {
$fehler = error_get_last();
echo 'Fehler: ' . ($fehler['message'] ?? 'Unbekannter Fehler');
} else {
fclose($handle);
}
// Wichtig · Fallstricke
Deprecation & Entfernung: $php_errormsg wurde mit PHP 7.2 als veraltet (deprecated) markiert und ist seit PHP 8.0 nicht mehr verfügbar. Bestehender Code muss auf error_get_last() umgestellt werden.
Gültigkeitsbereich: Da es sich nicht um eine echte Superglobale handelt, ist die Variable nicht automatisch in Funktionen verfügbar. Innerhalb einer Funktion muss global $php_errormsg; deklariert werden, was häufig zu Fehlern führt und ein weiterer Grund ist, error_get_last() zu bevorzugen.
Überschreiben: Der Wert wird bei jedem neuen Fehler überschrieben. Tritt zwischen dem Fehleraufruf und der Auswertung ein weiterer Fehler auf, geht die ursprüngliche Nachricht verloren.
Abhängigkeit von track_errors: Ohne track_errors = On in der php.ini bleibt $php_errormsg leer oder undefiniert. Die Einstellung track_errors selbst wurde ebenfalls in PHP 7.2 deprecated und in PHP 8.0 entfernt.