PHP - 域到IP

时间:2010-09-30 12:49:55

标签: php

我目前有一个像这样工作的系统:

插入IP,它会将IP发布到另一个.php页面。但是,当我尝试发布http://google.com时,它不会将域转换为IP。

我该怎么做?例如。当用户插入http://google.com或任何域时,它将自动解析IP。

我知道gethostbyadd函数,我不知道如何构造它,例如表格,表格,发布数据。

谢谢,如果有任何帮助。

5 个答案:

答案 0 :(得分:8)

到目前为止,你们有什么关系?怎么会失败?

一个疯狂的猜测是你输入http://google.com/并尝试从中获取IP,这将失败,因为URL也包含协议信息。您需要将域名和仅域名传递给gethostbyname:

gethostbyname('www.google.com'); // Works
gethostbyname('http://www.google.com'); // Will not work

如果您在开头有协议部分(http://),则可以使用parse_url:

gethostbyname(parse_url('http://www.google.com', PHP_URL_HOST));

如果您遇到其他特定问题,请告诉我们。如果您不知道从哪里开始,我建议您先阅读编程手册;)

答案 1 :(得分:5)

我认为您正在寻找gethostbyname

$ip = gethostbyname('www.google.com');

注意,请确保剥离http://以及任何空格/尾随字符,因为这可能会阻止准确的结果。

答案 2 :(得分:1)

您正在寻找的功能是$x = gethostbyname('stackoverflow.com');

答案 3 :(得分:1)

答案 4 :(得分:1)

在某些人中,函数gethostbyname运行缓慢或偶尔运行一次。有人说apache需要重新启动才能启动该功能。我无法确认这一点,但我想提供一种替代方法,如何使用nslookup

按域查找IP
function getAddrByHost($host, $timeout = 1) {
   $query = `nslookup -timeout=$timeout -retry=1 $host`;
   if(preg_match('/\nAddress: (.*)\n/', $query, $matches))
      return trim($matches[1]);
}

echo getAddrByHost('example.com');

使用XHProf进行速度测试:

尝试1

gethostbyname 5,014,593 microsec

getAddrByHost 29,656 microsec

尝试2

gethostbyname 5,016,678 microsec

getAddrByHost 13,887 microsec

尝试3

gethostbyname 5,014,640 microsec

getAddrByHost 8,297 microsec

结论:函数gethostbyname的执行时间超过5秒,这非常长。因此,我建议您使用更快的函数getAddrByHost

注意:php使用此文件/etc/resolv.conf来获取DNS服务器:

在我的情况下,我使用BIND(命名),它适用于主机127.0.0.1

# /etc/resolv.conf
nameserver 127.0.0.1
nameserver 8.8.8.8
nameserver 4.4.4.4