我目前有一个像这样工作的系统:
插入IP,它会将IP发布到另一个.php页面。但是,当我尝试发布http://google.com时,它不会将域转换为IP。
我该怎么做?例如。当用户插入http://google.com或任何域时,它将自动解析IP。
我知道gethostbyadd函数,我不知道如何构造它,例如表格,表格,发布数据。
谢谢,如果有任何帮助。
答案 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)
答案 3 :(得分:1)
答案 4 :(得分:1)
在某些人中,函数gethostbyname
运行缓慢或偶尔运行一次。有人说apache需要重新启动才能启动该功能。我无法确认这一点,但我想提供一种替代方法,如何使用nslookup
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