Start · Sprachen · PHP · Referenz · posix_get_last_error

posix_get_last_error

Funktion

Gibt die Fehlernummer (errno) zurück, die von der zuletzt fehlgeschlagenen POSIX-Funktion gesetzt wurde.

seit PHP 4.2.0 Kategorie: misc

Signatur

posix_get_last_error(): int

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

Typ
int
Beschreibung
Gibt die Fehlernummer der zuletzt fehlgeschlagenen POSIX-Funktion zurück. Wenn kein Fehler aufgetreten ist, wird 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;
}
Fehler #3: No such process

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)');
}
RuntimeException: posix_getgrgid(99999) fehlgeschlagen — Errno 0: Success

// 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.