現在の位置: ホーム> 最新記事一覧> 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システム)で構成されているかどうかを確認します。

  • セーフモードと機能無効: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-InSolvedDNSMASQなど)を再起動します。

  • PHPサーバーでWebサーバー(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";
    }
}
?>