Beim Programmieren von PHP -Socket ist der Fehlerbehandlungsmechanismus ein wichtiger Bestandteil der Sicherstellung der Robustheit des Programms. PHP bietet zwei Kernfunktionen: Socket_Clear_error () und socket_last_error (), um Entwicklern Socket -Fehler zu erhalten und zu handhaben. Die Ausgabe dieser beiden Funktionen selbst ist jedoch immer noch relativ niedrig, und es gibt immer noch einige Unannehmlichkeiten für Entwickler, um Probleme schnell zu lokalisieren und zu lösen. In diesem Artikel wird untersucht, wie diese beiden Funktionen mit einem benutzerdefinierten Fehlercode -Mapping -Mechanismus kombiniert werden, um eine effizientere und praktischere Fehlerbehandlung zu erstellen.
Diese Funktion gibt den Fehlercode der neuesten Socket -Operation zurück. Sie können den letzten Socket -Fehlercode erhalten, ohne die Parameter einzugeben, oder Sie können eine bestimmte Socket -Ressource übergeben, um die entsprechenden Fehler für die Ressource zu erhalten.
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_connect($socket, 'm66.net', 80);
$errCode = socket_last_error($socket);
echo "Fehlercode:$errCode\n";
Textbeschreibung des Fehlercodes erhalten:
echo socket_strerror($errCode);
Diese Funktion kann den aktuellen oder angegebenen Socket -Fehlerstatus löschen, um den alten Fehlercode zu vermeiden, der die Beurteilung einer neuen Operationsrunde beeinflusst.
socket_clear_error($socket);
Obwohl Socket_Strerror () Fehlerbeschreibungsinformationen liefert, sind seine Informationen im Allgemeinen allgemeiner und meist in Englisch und für komplexe Szenarien häufig nicht klar genug (z. B. mehrsprachige Ausgabe, Klassifizierung der Fehlerebene, Entwicklung und Debugging gegen Produktionsprotokolle). Die Einführung eines Satzes von "benutzerdefinierten Fehlercode -Mapping -Mechanismus" ist daher der Schlüssel zur Verbesserung der Qualität der Fehlerverarbeitung.
Wir können gemeinsame Fehlercodes über ein assoziatives Array abbilden. Beispiele sind wie folgt:
$socketErrorMap = [
10061 => ['msg' => 'Verbindung abgelehnt,Der Target -Host hat keinen Hördienst', 'level' => 'error'],
10060 => ['msg' => 'Verbindungszeitüberschreitung,Der Server reagiert nicht', 'level' => 'warning'],
10054 => ['msg' => 'Der Remote -Host zwang eine vorhandene Verbindung, um zu schließen', 'level' => 'error'],
// Fügen Sie weitere Karten hinzu...
];
function handleSocketError($socket = null, $clear = true) {
$errCode = socket_last_error($socket);
global $socketErrorMap;
$defaultMsg = socket_strerror($errCode);
$mapped = $socketErrorMap[$errCode] ?? ['msg' => $defaultMsg, 'level' => 'notice'];
if ($clear) {
socket_clear_error($socket);
}
// Bis zur Protokollierung erweitert、Ausnahme geworfen, etc.
echo "[{$mapped['level']}] Fehlercode: $errCode - {$mapped['msg']}\n";
}
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
@socket_connect($socket, 'm66.net', 12345); // Angenommen, dieser Port hat keinen Monitor
handleSocketError($socket); // Friendere Fehlermeldung ausgeben
socket_close($socket);
Die Ausgabe kann sein:
[error] Fehlercode: 10061 - Verbindung abgelehnt,Der Target -Host hat keinen Hördienst
Trennung der Entwicklungsumgebung und Produktionsumgebung : Detaillierte Fehlerinformationen können in der Entwicklungsphase ausgegeben werden, und die Produktionsumgebung kann in ein Standard -Protokollformat einheitlich sein.
Verwenden Sie in Kombination mit Protokollierungssystemen : Sie können Protokollbibliotheken wie Monolog verwenden, um Fehlerinformationen in Dateien, Datenbanken oder Überwachungssystemen aufzuzeichnen.
Anpassungsfähige mehrsprachige Unterstützung : Fehlerbeschreibungsinformationen können in mehrsprachige Formate erweitert werden, wodurch die Internationalisierungsfunktionen des Systems verbessert werden.
Über Socket_Clear_error () und socket_last_error () in Kombination mit benutzerdefinierten Fehlerzuordnungsmechanismen können wir eine raffiniertere Fehlererkennung und -reaktion erreichen, wodurch die Wartbarkeit und Benutzerfreundlichkeit von Socket-Anwendungen erheblich verbessert werden. Dieser Ansatz verbessert nicht nur die Lesbarkeit der Fehlersemantik, sondern bildet auch die Grundlage für nachfolgende Erweiterungen (wie automatische Wiederholung, fein abgestimmte Protokollierung usw.). Dies ist eine bewährte Verfahren, die es wert ist, für Entwickler zu fördern.