Signatur
Beschreibung
posix_get_last_error() liest den internen POSIX-Fehlerzustand aus und gibt die entsprechende Fehlernummer als Ganzzahl zurück. Dieser Wert entspricht dem C-Standard-errno, der nach einem fehlgeschlagenen Systemaufruf gesetzt wird.
Die Funktion wird typischerweise direkt nach dem Aufruf einer POSIX-Funktion verwendet, die false zurückgegeben hat, um die genaue Fehlerursache zu ermitteln. Die zurückgegebene Nummer kann anschließend mit posix_strerror() in eine lesbare Fehlermeldung umgewandelt werden.
Zu beachten ist, dass der Fehlerzustand nur so lange gültig ist, bis der nächste POSIX-Aufruf erfolgt. Das Auslesen sollte daher unmittelbar nach dem Fehler geschehen. Die Fehlernummern sind betriebssystemabhängig, entsprechen jedoch üblicherweise den POSIX-Standards (z. B. EPERM = 1, ENOENT = 2 usw.).
Rückgabewert
0 zurückgegeben.Beispiele
Fehlernummer und -meldung nach einem fehlgeschlagenen POSIX-Aufruf
<?php
// Versuche, ein Signal an einen nicht existierenden Prozess zu senden
$result = posix_kill(999999, 0);
if ($result === false) {
$errno = posix_get_last_error();
$errmsg = posix_strerror($errno);
echo "Fehler #{$errno}: {$errmsg}" . PHP_EOL;
}
Hilfsfunktion zur POSIX-Fehlerbehandlung
<?php
function checkPosixError(string $context): void {
$errno = posix_get_last_error();
if ($errno !== 0) {
$message = posix_strerror($errno);
throw new RuntimeException(
"{$context} fehlgeschlagen — Errno {$errno}: {$message}"
);
}
}
// Versuche, die Gruppeninfo einer ungültigen GID zu lesen
$info = posix_getgrgid(99999);
if ($info === false) {
checkPosixError('posix_getgrgid(99999)');
}
// Wichtig · Fallstricke
Betriebssystemabhängigkeit: Die genauen Fehlernummern können je nach Betriebssystem variieren. POSIX-Funktionen stehen unter Windows nicht zur Verfügung; das posix-Erweiterungsmodul muss aktiviert sein.
Fehlerzustand wird überschrieben: Der interne Fehlerzustand wird bei jedem weiteren POSIX-Aufruf — auch bei einem erfolgreichen — möglicherweise zurückgesetzt oder überschrieben. posix_get_last_error() sollte daher unmittelbar nach dem fehlgeschlagenen Aufruf verwendet werden.
Die Funktion ist ein Alias für posix_errno(), beide sind seit PHP 4.2.0 verfügbar.