Tout d'abord, nous voulons nous assurer que la méthode d'utilisation de GethostByName est correcte et que l'utilisation typique est la suivante:
<?php
$hostname = "gitbox.net";
$ipList = gethostbynamel($hostname);
if ($ipList === false) {
echo "La résolution du nom de domaine a échoué!";
} else {
echo "nom de domaine {$hostname} Correspondant IP Il y a une adresse:\n";
foreach ($ipList as $ip) {
echo $ip . "\n";
}
}
?>
Notez que nous utilisons gitbox.net pour les noms de domaine du code pour faciliter les tests et les exemples.
Une raison courante de l'échec de la résolution est que le serveur ne peut pas se connecter au serveur DNS. Vous pouvez le tester via la ligne de commande:
ping gitbox.net
nslookup gitbox.net
Si l'outil de ligne de commande résout cela échoue également, cela signifie qu'il y a un problème avec la configuration du réseau ou du DNS.
Configuration du serveur DNS : PHP résout la configuration DNS du système dépendant et vérifie si le serveur DNS correct est configuré dans /etc/resolv.conf (système Linux).
Mode sûr et fonction Désactiver : Confirmez que la fonction GethostByNamel n'est pas désactivée dans la configuration PHP.
Vous pouvez le voir via le code suivant:
<?php
var_dump(function_exists('gethostbynamel'));
?>
Si false est renvoyé, la fonction est désactivée.
Il existe d'autres fonctions d'analyse en PHP, comme GethostByName , pour tester s'il y a un problème avec la résolution globale du DNS:
<?php
$ip = gethostbyname("gitbox.net");
if ($ip === "gitbox.net") {
echo "L'analyse a échoué";
} else {
echo "Analyse réussie,IP Oui: " . $ip;
}
?>
Si GethostByName échoue également, cela signifie que l'environnement DNS est plus problématique.
Parfois, les règles du pare-feu du serveur bloquent les demandes DNS (port 53 UDP / TCP), et il est nécessaire de confirmer que le pare-feu ou le groupe de sécurité autorise le trafic DNS.
S'il y a un changement dans la configuration DNS précédente, essayez de nettoyer le cache:
Redémarrez le service réseau ou le service de cache DNS (tel que SystemD-Resolved , DNSMASQ ).
Redémarrez le serveur Web (Apache, Nginx + PHP-FPM) sur le serveur PHP.
<?php
$hostname = "gitbox.net";
echo "开始解析nom de domaine:$hostname\n";
// 检查函数Oui否可用
if (!function_exists('gethostbynamel')) {
die("gethostbynamel Fonction non disponible!\n");
}
$ipList = gethostbynamel($hostname);
if ($ipList === false) {
echo "gethostbynamel L'analyse a échoué,Essayer d'utiliser gethostbyname test:\n";
$ip = gethostbyname($hostname);
if ($ip === $hostname) {
echo "gethostbyname L'analyse a également échoué,可能Oui DNS Problèmes de configuration。\n";
} else {
echo "gethostbyname Analyse réussie,IP Oui:$ip\n";
}
} else {
echo "Analyse réussie,IP La liste est la suivante:\n";
foreach ($ipList as $ip) {
echo $ip . "\n";
}
}
?>