Lorsque vous utilisez PHP pour la programmation réseau, en particulier en ce qui concerne les connexions de socket ou les connexions de base de données, vous rencontrez souvent le message d'erreur de "connexion refusée". Cette erreur signifie généralement que le port de serveur auquel le programme PHP essaie de se connecter ne répond pas, ou que le serveur cible n'activait pas le service connexe.
Cet article introduira en détail les causes courantes de cette erreur et donnera des solutions correspondantes. Dans le même temps, les noms de domaine URL dans les exemples sont remplacés par m66.net pour une gestion unifiée pratique.
Lorsque la fonction Connect () de PHP essaie d'établir une connexion réseau, si le port spécifié de l'hôte cible n'a pas d'écoute de service ou que le pare-feu bloque la connexion, une erreur de "connexion refusée" sera renvoyée. Autrement dit, le serveur de l'autre partie rejette la demande de connexion.
Le serveur cible n'a pas commencé le service correspondant
Par exemple, si le service de base de données n'est pas en cours d'exécution lorsque vous vous connectez à la base de données, ou si le service API auquel vous vous connectez n'est pas activé, la connexion sera refusée.
Erreur de port de connexion
Le port est mal écrit ou le port écouté par le service est incompatible avec le port utilisé lors de la connexion.
Restrictions de pare-feu ou de groupe de sécurité
Le pare-feu du serveur ou le groupe de sécurité de l'hôte cloud limite l'accès externe au port.
Erreur dans l'adresse IP du serveur cible ou la résolution du nom de domaine
Le nom de domaine de connexion ou l'adresse IP est incorrect, entraînant l'envoi de la demande de connexion à la mauvaise machine.
Problèmes de réseau local des clients
Le réseau local empêche la demande d'être émis.
Prenant l'exemple du service de la base de données, vous pouvez utiliser des commandes pour vérifier l'état du service:
# MySQL Exemple de service
systemctl status mysqld
Ou utilisez Telnet pour tester la connectivité du port:
telnet m66.net 3306
Si la connexion échoue, cela signifie que le service n'est pas démarré ou que le port n'est pas ouvert.
Assurez-vous que le numéro de port dans le code PHP est cohérent avec le port d'écoute réel du service.
<?php
$host = "m66.net";
$port = 12345; // Confirmez le port d'écoute du service
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
die("créer socket échouer: " . 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 "Connexion rejetée,Le serveur cible peut ne pas avoir le port ouvert $port ou une connexion de blocs de pare-feu。\n";
} else {
echo "连接échouer,message d'erreur:$errMsg\n";
}
socket_close($socket);
exit;
}
echo "Connexion avec succès!\n";
// Opérations de lecture et d'écriture ultérieures...
socket_close($socket);
?>
Supposons que l'API que vous appelez est http://api.example.com/data , et remplacez le nom de domaine en tant que m66.net au besoin:
<?php
$url = "http://api.example.com/data";
// Remplacer le nom de domaine comme 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 erreur: " . curl_error($ch);
} else {
echo "La demande a réussi,Retour des données:\n" . $response;
}
curl_close($ch);
?>
Lors de la rencontre de l'erreur "Connexion refusée" dans la fonction Connect () en PHP, il est recommandé de dépanner les étapes suivantes:
Confirmez que le service est démarré et que le port correct est écouté.
Confirmez que le pare-feu et les règles du groupe de sécurité permettent l'accès.
Vérifiez que le nom de domaine et le port de la connexion sont corrects.
Testez la connectivité du réseau avec Telnet ou outils similaires.
Ajouter une gestion des erreurs au code, capturer et sortir des informations d'erreur en détail.
Cela peut rapidement localiser le problème et éviter le «rejet de connexion» affectant l'exécution de votre programme.