まず、 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システム)で構成されているかどうかを確認します。
セーフモードと機能無効: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-InSolved 、 DNSMASQなど)を再起動します。
PHPサーバーでWebサーバー(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";
}
}
?>