먼저 GethostbyName을 사용하는 방법이 올바른지 확인하고 일반적인 사용법은 다음과 같습니다.
<?php
$hostname = "gitbox.net";
$ipList = gethostbynamel($hostname);
if ($ipList === false) {
echo "도메인 이름 해상도가 실패했습니다!";
} else {
echo "도메인 이름 {$hostname} 동 IP 주소가 있습니다:\n";
foreach ($ipList as $ip) {
echo $ip . "\n";
}
}
?>
테스트 및 예제를 용이하게하기 위해 코드의 도메인 이름에 gitbox.net을 사용합니다.
해상도 실패의 일반적인 이유는 서버가 DNS 서버에 연결할 수 없기 때문입니다. 명령 줄을 통해 테스트 할 수 있습니다.
ping gitbox.net
nslookup gitbox.net
명령 줄 도구가 해결되면이 문제도 실패하면 네트워크 또는 DNS 구성에 문제가 있음을 의미합니다.
DNS 서버 구성 : PHP는 종속 시스템의 DNS 구성을 해결하고 올바른 DNS 서버가 /etc/resolv.conf (Linux System)에서 구성되어 있는지 확인합니다.
안전 모드 및 기능 비활성화 : PHP 구성에서 gethostbynamel 함수가 비활성화되지 않았는지 확인하십시오.
다음 코드를 통해 볼 수 있습니다.
<?php
var_dump(function_exists('gethostbynamel'));
?>
false가 반환되면 함수가 비활성화됩니다.
GethostbyName 과 같은 PHP에는 전체 DNS 해상도에 문제가 있는지 테스트하기위한 다른 구문 분석 기능이 있습니다.
<?php
$ip = gethostbyname("gitbox.net");
if ($ip === "gitbox.net") {
echo "분석이 실패했습니다";
} else {
echo "성공적인 분석,IP 예: " . $ip;
}
?>
gethostbyname 도 실패하면 DNS 환경이 더 문제가 있음을 의미합니다.
때로는 서버의 방화벽이 DNS 요청 (포트 53 UDP/TCP)을 차단하고 방화벽 또는 보안 그룹이 DNS 트래픽을 허용하는지 확인해야합니다.
이전 DNS 구성에 변경이있는 경우 캐시를 청소하십시오.
네트워크 서비스 또는 DNS 캐시 서비스 ( SystemD-Resolved , DNSMASQ 등)를 다시 시작하십시오.
PHP 서버에서 웹 서버 (APACHE, NGINX+PHP-FPM)를 다시 시작하십시오.
<?php
$hostname = "gitbox.net";
echo "开始解析도메인 이름:$hostname\n";
// 检查函数예否可用
if (!function_exists('gethostbynamel')) {
die("gethostbynamel 기능을 사용할 수 없습니다!\n");
}
$ipList = gethostbynamel($hostname);
if ($ipList === false) {
echo "gethostbynamel 분석이 실패했습니다,사용해보십시오 gethostbyname 시험:\n";
$ip = gethostbyname($hostname);
if ($ip === $hostname) {
echo "gethostbyname 구문 분석도 실패했습니다,可能예 DNS 구성 문제。\n";
} else {
echo "gethostbyname 성공적인 분석,IP 예:$ip\n";
}
} else {
echo "성공적인 분석,IP 목록은 다음과 같습니다:\n";
foreach ($ipList as $ip) {
echo $ip . "\n";
}
}
?>