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