Start · Sprachen · PHP · Referenz · pcntl_strerror

pcntl_strerror

Funktion

Gibt die zur angegebenen POSIX-Fehlernummer (<code>errno</code>) gehörende menschenlesbare Systemfehlermeldung zurück.

seit PHP 5.3.4 Kategorie: misc

Signatur

pcntl_strerror(int $error_code): string|false

Beschreibung

pcntl_strerror() übersetzt einen numerischen POSIX-Fehlercode (wie er z. B. von pcntl_get_last_error() zurückgegeben wird) in eine lesbare Fehlermeldung des Betriebssystems. Die Meldung entspricht der C-Funktion strerror() und ist sprachabhängig von der Locale-Einstellung des Systems.

Die Funktion ist besonders nützlich, um nach fehlgeschlagenen Prozessoperationen wie pcntl_fork(), pcntl_waitpid() oder pcntl_exec() eine aussagekräftige Fehlermeldung zu ermitteln und zu protokollieren, anstatt nur einen numerischen Fehlercode zu erhalten.

Der typische Einsatz ist die Kombination mit pcntl_get_last_error(): Zunächst wird der zuletzt aufgetretene Fehlercode abgerufen und anschließend mit pcntl_strerror() in einen lesbaren Text umgewandelt. Dies entspricht dem POSIX-Standard und ist auf Unix-ähnlichen Systemen (Linux, macOS) verfügbar.

Parameter

Name Typ Default Beschreibung
$error_code Pflicht int Ein POSIX-Fehlercode (errno), wie er etwa von pcntl_get_last_error() geliefert wird. Gültige Werte sind systemabhängige Konstanten wie PCNTL_ECHILD, PCNTL_EINTR usw.

Rückgabewert

Typ
string|false
Beschreibung
Gibt die zur Fehlernummer gehörende Systemfehlermeldung als string zurück. Bei einem unbekannten oder ungültigen Fehlercode wird false zurückgegeben.

Beispiele

Fehlermeldung nach fehlgeschlagenem Fork ausgeben

<?php
// Nur auf Unix-Systemen verfügbar
$pid = pcntl_fork();

if ($pid === -1) {
    $errno = pcntl_get_last_error();
    $message = pcntl_strerror($errno);
    echo "Fork fehlgeschlagen (errno {$errno}): {$message}" . PHP_EOL;
} elseif ($pid === 0) {
    // Kindprozess
    echo "Kindprozess läuft (PID: " . posix_getpid() . ")" . PHP_EOL;
    exit(0);
} else {
    // Elternprozess wartet
    pcntl_waitpid($pid, $status);
    echo "Kindprozess beendet." . PHP_EOL;
}
Kindprozess läuft (PID: 12345) Kindprozess beendet.

Bekannte POSIX-Fehlercodes auflisten

<?php
// Einige typische POSIX-Fehlercodes übersetzen
$errorCodes = [
    PCNTL_EINTR,
    PCNTL_ECHILD,
    PCNTL_ENOMEM,
    PCNTL_EAGAIN,
];

foreach ($errorCodes as $code) {
    $msg = pcntl_strerror($code);
    echo "errno {$code}: {$msg}" . PHP_EOL;
}
errno 4: Interrupted system call errno 10: No child processes errno 12: Cannot allocate memory errno 11: Resource temporarily unavailable

// Wichtig · Fallstricke

Plattformabhängigkeit: pcntl_strerror() ist Teil der PCNTL-Erweiterung und steht nur auf Unix-ähnlichen Systemen (Linux, macOS) zur Verfügung. Unter Windows ist diese Funktion nicht verfügbar.

Locale-Abhängigkeit: Die zurückgegebene Meldung kann je nach Systemkonfiguration und Locale in unterschiedlichen Sprachen erscheinen. Für mehrsprachige Anwendungen oder Logging sollte ggf. die Locale explizit gesetzt werden.

Verfügbarkeit: Die PCNTL-Erweiterung muss beim Kompilieren aktiviert worden sein (--enable-pcntl). In der Regel ist sie in PHP-CLI-Builds enthalten, aber nicht in FPM- oder Webserver-Umgebungen standardmäßig aktiv.