현재 위치: > 최신 기사 목록> GethostbyNamel을 사용한 실패한 시간 도메인 이름 해상도 문제 해결 단계

GethostbyNamel을 사용한 실패한 시간 도메인 이름 해상도 문제 해결 단계

gitbox 2025-05-27

1. 확인 기능의 기본 사용

먼저 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을 사용합니다.


2. 단계를 확인하십시오

1. 네트워크 연결을 확인하십시오

해상도 실패의 일반적인 이유는 서버가 DNS 서버에 연결할 수 없기 때문입니다. 명령 줄을 통해 테스트 할 수 있습니다.

 ping gitbox.net
nslookup gitbox.net

명령 줄 도구가 해결되면이 문제도 실패하면 네트워크 또는 DNS 구성에 문제가 있음을 의미합니다.

2. PHP 환경 구성을 확인하십시오

  • DNS 서버 구성 : PHP는 종속 시스템의 DNS 구성을 해결하고 올바른 DNS 서버가 /etc/resolv.conf (Linux System)에서 구성되어 있는지 확인합니다.

  • 안전 모드 및 기능 비활성화 : PHP 구성에서 gethostbynamel 함수가 비활성화되지 않았는지 확인하십시오.

    다음 코드를 통해 볼 수 있습니다.

 <?php
var_dump(function_exists('gethostbynamel'));
?>

false가 반환되면 함수가 비활성화됩니다.

3. 다른 DNS 해상도 함수와 비교

GethostbyName 과 같은 PHP에는 전체 DNS 해상도에 문제가 있는지 테스트하기위한 다른 구문 분석 기능이 있습니다.

 <?php
$ip = gethostbyname("gitbox.net");
if ($ip === "gitbox.net") {
    echo "분석이 실패했습니다";
} else {
    echo "성공적인 분석,IP 예: " . $ip;
}
?>

gethostbyname 도 실패하면 DNS 환경이 더 문제가 있음을 의미합니다.

4. 방화벽 및 네트워크 제한을 확인하십시오

때로는 서버의 방화벽이 DNS 요청 (포트 53 UDP/TCP)을 차단하고 방화벽 또는 보안 그룹이 DNS 트래픽을 허용하는지 확인해야합니다.

5. 캐시를 구문 분석하고 서비스를 다시 시작합니다

이전 DNS 구성에 변경이있는 경우 캐시를 청소하십시오.

  • 네트워크 서비스 또는 DNS 캐시 서비스 ( SystemD-Resolved , DNSMASQ 등)를 다시 시작하십시오.

  • PHP 서버에서 웹 서버 (APACHE, NGINX+PHP-FPM)를 다시 시작하십시오.


3. 샘플 완전한 디버깅 코드

 <?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";
    }
}
?>