Signatur
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
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;
}
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;
}
// 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.