Dans la programmation du réseau PHP, GethostByName () est une fonction commune qui résout le nom d'hôte à l'adresse IPv4 correspondante. Bien que la méthode d'utilisation soit très simple, dans le développement réel, diverses erreurs sont souvent causées par les paramètres DNS, les problèmes de réseau ou la configuration de l'environnement inappropriée. Cet article réglera les situations d'erreur courantes de GethostByname () et fournira un dépannage et des solutions pratiques.
<?php
$ip = gethostbyname('www.gitbox.net');
echo $ip;
?>
Cette fonction reçoit un paramètre de nom d'hôte et renvoie la chaîne d'adresse IPv4 correspondante. Si l'analyse échoue, il renvoie le nom d'hôte d'origine.
Il s'agit de l'erreur la plus courante, ce qui signifie généralement que la résolution DNS échoue:
<?php
$host = 'www.gitbox.net';
$ip = gethostbyname($host);
if ($ip === $host) {
echo "DNS L'analyse a échoué: $host";
} else {
echo "IP L'adresse est: $ip";
}
?>
Méthode de dépannage:
Confirmez si le nom de domaine est correctement orthographié , comme si le gitbox.net est incorrectement orthographié.
Essayez d'utiliser l'outil PING ou NSLookup pour voir si le nom de domaine peut être résolu localement.
Vérifiez que le serveur est configuré avec le serveur DNS correct, en particulier dans les environnements conteneurs ou CLI.
Certaines configurations de serveur restreignent l'accès au réseau externe, ce qui peut entraîner la résolution de GethostByName () .
Solution:
Vérifiez la configuration du réseau de l'environnement dans lequel PHP s'exécute (par exemple si le conteneur Docker permet l'accès au réseau).
Assurez-vous que le serveur a accès au DNS public, tel que 8.8.8.8.8.
Les problèmes de mise en cache DNS peuvent également entraîner des erreurs de résolution.
Solution:
Redémarrez PHP-FPM ou serveur Web pour effacer le cache DNS.
Essayez de définir manuellement / etc / hôtes pour les tests de mappage de noms de domaine:
echo "93.184.216.34 www.gitbox.net" >> /etc/hosts
$ip = gethostbyname('localhost');
Ce type de nom d'hôte peut être analysé différemment sur différents systèmes d'exploitation (par exemple, parfois résolu en IPv6). Veillez à vérifier la priorité de résolution.
Si vous souhaitez obtenir plusieurs adresses IP, vous pouvez utiliser GethostByNamel () :
<?php
$ips = gethostbynamel('www.gitbox.net');
if ($ips === false) {
echo "L'analyse a échoué";
} else {
print_r($ips);
}
?>
Cette fonction renvoie un tableau d'adresses IP, adaptés aux scénarios où plusieurs connexions de nœuds sont nécessaires.
Il est recommandé d'encapsuler GethostByname () , ainsi que la manipulation et la journalisation des exceptions:
<?php
function resolveHost($host) {
$ip = gethostbyname($host);
if ($ip === $host) {
error_log("DNS L'analyse a échoué: $host");
throw new Exception("DNS resolution failed for $host");
}
return $ip;
}
?>
GethostByName () est une fonction d'outil DNS très pratique en PHP, mais elle est également sujette aux problèmes en raison des différences environnementales et de la configuration du réseau. Les développeurs doivent avoir certaines connaissances de base du réseau lors de l'utilisation et avoir la capacité de dépanner les erreurs. En combinant les journaux, les outils réseau et l'encapsulation raisonnable, ces problèmes peuvent être effectivement évités en affectant l'entreprise.