Start · Sprachen · PHP · Referenz · swoole_strerror

swoole_strerror

Funktion

Wandelt eine numerische Errno-Fehlernummer in eine lesbare Fehlermeldung um.

Kategorie: misc

Signatur

swoole_strerror(int $errno, int $error_type = 0): string

Beschreibung

swoole_strerror() ist das Swoole-Äquivalent zur C-Funktion strerror() und konvertiert einen numerischen Fehlercode in einen menschenlesbaren Fehlertext. Sie wird hauptsächlich in asynchronen Swoole-Anwendungen eingesetzt, um Betriebssystem- oder Swoole-interne Fehlercodes zu interpretieren.

Der optionale Parameter $error_type steuert, aus welchem Fehlerbereich der Code stammt: Mit dem Wert 0 (Standard) wird ein Betriebssystem-Fehlercode (POSIX/libc) aufgelöst, während 1 Swoole-eigene DNS-Fehlercodes behandelt. Dies ist besonders hilfreich, wenn in Swoole-Callbacks wie onError oder onClose der Fehlercode ausgewertet werden soll.

Typische Anwendungsfälle sind Logging, Fehlerdiagnose und das Anzeigen von verständlichen Fehlermeldungen, wenn Swoole-Server oder -Clients Verbindungsprobleme melden. Der Fehlercode kann dabei z. B. über swoole_last_error() oder aus Callback-Parametern stammen.

  • Wert 0: POSIX-Systemfehler (z. B. ECONNREFUSED, ETIMEDOUT)
  • Wert 1: Swoole DNS-Fehlercodes

Parameter

Name Typ Default Beschreibung
$errno Pflicht int Numerischer Fehlercode, der in einen lesbaren Text umgewandelt werden soll. Typischerweise ein POSIX-Errno-Wert oder ein Swoole-interner Fehlercode.
$error_type int 0 Art des Fehlercodes: 0 für Betriebssystem-/POSIX-Fehlercodes (Standard), 1 für Swoole-DNS-Fehlercodes.

Rückgabewert

Typ
string
Beschreibung
Gibt eine lesbare Fehlermeldung als Zeichenkette zurück. Falls der Fehlercode nicht bekannt ist, wird ein generischer Fallback-Text zurückgegeben.

Beispiele

Systemfehlercode in Text umwandeln

<?php
// ECONNREFUSED hat typischerweise den Errno-Wert 111 auf Linux
$errno = 111;
$message = swoole_strerror($errno);
echo "Fehler $errno: $message" . PHP_EOL;

// Letzten Swoole-Fehler auslesen und als Text ausgeben
$lastError = swoole_last_error();
if ($lastError !== 0) {
    echo 'Letzter Swoole-Fehler: ' . swoole_strerror($lastError) . PHP_EOL;
}
Fehler 111: Connection refused

Fehlerbehandlung im Swoole-Server-Callback

<?php
$server = new Swoole\Server('0.0.0.0', 9501);

$server->on('connect', function ($server, $fd) {
    echo "Client $fd verbunden." . PHP_EOL;
});

$server->on('close', function ($server, $fd) {
    $errno = swoole_last_error();
    if ($errno !== 0) {
        $errorMsg = swoole_strerror($errno);
        echo "Verbindung $fd geschlossen mit Fehler [$errno]: $errorMsg" . PHP_EOL;
    } else {
        echo "Verbindung $fd normal geschlossen." . PHP_EOL;
    }
});

$server->on('receive', function ($server, $fd, $reactorId, $data) {
    $server->send($fd, 'Pong: ' . $data);
});

$server->start();

// Wichtig · Fallstricke

Voraussetzung: Die Funktion ist nur verfügbar, wenn die Swoole-Erweiterung installiert ist. Sie steht in Standard-PHP ohne Swoole nicht zur Verfügung.

Plattformunterschiede: Fehlercodes und ihre Texte können je nach Betriebssystem (Linux, macOS) leicht unterschiedlich ausfallen, da die zugrundeliegenden POSIX-Fehlermeldungen systemabhängig sind.

Für Standard-PHP-Fehler ohne Swoole kann alternativ strerror() verwendet werden, das identisch funktioniert, jedoch ohne den $error_type-Parameter.