如何使用PHP将主机名解析为IP地址, 但使用不同的名称服务器(例如OpenDNS或Google Public DNS)。
dns_get_record()
或gethostbyname()
似乎不能使用与系统上当前设置的名称服务器不同的名称服务器(在TCP / IP设置或/etc/resolv.conf
中)。
我发现的唯一方法是使用PEAR类Net / DNS,但它在PHP 5.4下给了我很多警告
答案 0 :(得分:10)
<?
require_once 'Net/DNS2.php';
$resolver = new Net_DNS2_Resolver( array('nameservers' => array('208.67.222.123')) );
$resp = $resolver->query("hooktube.com.", 'A');
print_r($resp);
echo $resp->answer[0]->address;
答案 1 :(得分:7)
尝试net_dns2(它也在PEAR中)。
答案 2 :(得分:6)
如果允许您从脚本运行shell脚本,则可以使用系统的nslookup
命令。
$host = 'stackoverflow.com';
$dns = '8.8.8.8'; // Google Public DNS
$ip = `nslookup $host $dns`; // the backticks execute the command in the shell
$ips = array();
if(preg_match_all('/Address: ((?:\d{1,3}\.){3}\d{1,3})/', $ip, $match) > 0){
$ips = $match[1];
}
print_r($ips);
注意:如果escapeshellarg
和$host
来自用户输入,请使用$dns
。