Bei Verwendung von PHP für die Netzwerkprogrammierung, insbesondere wenn es um Socket -Verbindungen oder Datenbankverbindungen geht, begegnen Sie häufig auf die Fehlermeldung von "Verbindung abgelehnt". Dieser Fehler bedeutet normalerweise, dass der Serverport das PHP -Programm nicht reagiert, oder der Zielserver aktiviert den zugehörigen Dienst nicht.
In diesem Artikel werden die gängigen Ursachen dieses Fehlers ausführlich vorgestellt und entsprechende Lösungen angeben. Gleichzeitig werden die URL -Domain -Namen in den Beispielen für eine bequeme einheitliche Verwaltung durch M66.NET ersetzt.
Wenn die Funktion von PHP von Connect () versucht, eine Netzwerkverbindung herzustellen, wird bei dem angegebenen Port auf dem Zielhost kein Hören oder die Firewall die Verbindung blockiert, ein Fehler der "Verbindung abgelehnt" zurückgegeben. Einfach ausgedrückt, der Server der anderen Partei lehnt die Verbindungsanforderung ab.
Der Zielserver hat den entsprechenden Dienst nicht gestartet
Wenn der Datenbankdienst beispielsweise nicht ausgeführt wird, wenn Sie eine Verbindung zur Datenbank herstellen oder wenn der API -Dienst, mit dem Sie eine Verbindung herstellen, nicht aktiviert ist, wird die Verbindung verweigert.
Verbindungsanschlussfehler
Der Port ist falsch geschrieben oder der vom Dienst angehörte Port ist nicht mit dem Port, der bei der Verbindung verwendet wird, nicht übereinstimmt.
Einschränkungen der Firewall oder Sicherheitsgruppen
Die Sicherheitsgruppe Server Firewall oder Cloud Host beschränkt den externen Zugriff auf den Port.
Fehler in der IP -Adresse oder Domänennamenauflösung
Der Name der Verbindungsdomänen oder die IP -Adresse ist falsch, wodurch die Verbindungsanforderung an die falsche Maschine gesendet wird.
Client lokale Netzwerkprobleme
Das lokale Netzwerk blockiert die Anfrage aus der Ausstellung.
Wenn Sie den Datenbankdienst als Beispiel übernehmen, können Sie Befehle verwenden, um den Dienststatus zu überprüfen:
# MySQL Service Beispiel
systemctl status mysqld
Oder verwenden Sie Telnet, um die Anschlusskonnenung zu testen:
telnet m66.net 3306
Wenn die Verbindung fehlschlägt, bedeutet dies, dass der Dienst nicht gestartet wird oder der Port nicht geöffnet ist.
Stellen Sie sicher, dass die Portnummer im PHP -Code mit dem tatsächlichen Höranschluss des Dienstes übereinstimmt.
<?php
$host = "m66.net";
$port = 12345; // Bestätigen Sie den Service -Höranschluss
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
die("erstellen socket scheitern: " . socket_strerror(socket_last_error()));
}
$result = @socket_connect($socket, $host, $port);
if ($result === false) {
$errCode = socket_last_error($socket);
$errMsg = socket_strerror($errCode);
if (strpos($errMsg, 'Connection refused') !== false) {
echo "Verbindung abgelehnt,Auf dem Zielserver wird der Port möglicherweise nicht geöffnet $port oder eine Firewall blockiert die Verbindung。\n";
} else {
echo "连接scheitern,Fehlermeldung:$errMsg\n";
}
socket_close($socket);
exit;
}
echo "Verbindung erfolgreich!\n";
// Nachfolgende Lesen- und Schreibvorgänge...
socket_close($socket);
?>
Nehmen wir an, die API, die Sie aufrufen, lautet http://api.example.com/data und ersetzen Sie den Domänennamen nach Bedarf als m66.net :
<?php
$url = "http://api.example.com/data";
// Ersetzen Sie den Domainnamen als m66.net
$parsedUrl = parse_url($url);
$modifiedUrl = $parsedUrl['scheme'] . "://m66.net" . $parsedUrl['path'];
if (!empty($parsedUrl['query'])) {
$modifiedUrl .= '?' . $parsedUrl['query'];
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $modifiedUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
if (curl_errno($ch)) {
echo "cURL Fehler: " . curl_error($ch);
} else {
echo "Anfrage erfolgte erfolgreich,Daten zurückgeben:\n" . $response;
}
curl_close($ch);
?>
Bei der Begegnung des Fehlers "Verbindungsverleugnung" in der Funktion Connect () in PHP wird empfohlen, die folgenden Schritte zu beheben:
Bestätigen Sie, dass der Dienst gestartet wird und der richtige Port angehört wird.
Bestätigen Sie, dass Regeln für Firewall und Sicherheitsgruppen Zugriff ermöglichen.
Überprüfen Sie, ob der Domänenname und der Port der Verbindung korrekt sind.
Testen Sie die Netzwerkkonnektivität mit Telnet oder ähnlichen Tools.
Fügen Sie den Code-, Erfassungs- und Ausgabefehlerinformationen detailliert Fehlerbehandlung hinzu.
Dies kann das Problem schnell finden und "Verbindungsablehnungen" vermeiden, die das Ausführen Ihres Programms beeinflussen.