奔牛网>代码>PHP编程>>PHP获取域名及域名对应的IP地址的方法
2017年05月25日

PHP获取域名及域名对应的IP地址的方法

先说说PHP中如何获取域名
首先获取用户浏览器上URL的域名
例如有一段网址:http://www.bnxb.com/plus/feedback.php

方法1,$_SERVER,优点,简便快捷,缺点不能使用传递过来的地址和不支持系统变量的主机 

echo $_SERVER[“HTTP_HOST”];
//则会输出www.bnxb.com

本地测试则会输出localhost。

方法2,使用parse_url函数,但是要注意这个函数只能转化http开头的网址,因此如果是用来作为输入网址的转化,需要注意必须输入http://

<?php
$url ="http://www.bnxb.com/plus/feedback.php";
$arr=parse_url($url);
echo "<pre>";
print_r($arr);
echo "</pre>";
?>
输出为数组,结果为:

Array
(
[scheme] => http
[host] => www.jbxue.com
[path] => /index.php
[query] => referer=jbxue.com
)
说明:
scheme对应着协议,host则对应着域名,path对应着执行文件的路径,query则对应着相关的参数;

实例:
<?php

$Url='http://www.bnxb.com/plus/feedback.php'; 
$tempu=parse_url($Url); 
$message=$tempu['host']; 
echo $message; 
?>
//输出结果就是 www.bnxb.com

如果你不想要www,可以用str_replace替换掉

$no_www_message=str_replace('www.','',$message); 

考虑到这个函数必须以http开头,因此我们需要将不带http的URL字符串加上http
实例:一个查询输入域名解析到IP地址的实例
<form method="post" action="">
输入网址:<input type="text" name="url" size="48"/> <input type="submit" value="检测"/>
</form>
<?php
$domainurl = $_POST['url'];
if (!preg_match('/^http/', $domainurl)) {
    $domainurl = "http://" . $domainurl;
}

$tempu=parse_url($domainurl);
$message=$tempu['host'];

echo '网页: '.$domainurl.' 的域名: ';
echo $message;
echo '解析到IP: ';
echo  gethostbyname($message);
?>
为了兼容https,上面正则替换是用preg_match查找有没有http这个字眼,如果没有就加上,https包含在http这个关键字内,所以也能用

方法3,采用自定义函数。


<?php
$url ="http://www.bnxb.com/plus/feedback.php";
get_host($url);
function get_host($url){
//首先替换掉http://
$url=Str_replace("http://","",$url);
//获得去掉http://url的/最先出现的位置
$position=strpos($url,"/");
//如果没有斜杠则表明url里面没有参数,直接返回url,
//否则截取字符串
if($position==false){
echo $url;
}else{
echo substr($url,0,$position);
}
}
?>


方法4,使用php正则表达式。
<?php
header("Content-type:text/html;charset=utf-8");
$url ="http://www.bnxb.com/plus/feedback.php";
$pattern="/(http:\/\/)?(.*)\//";
if(preg_match($pattern,$url,$arr)){
echo "匹配成功!";
echo "匹配结果:".$arr[2];
}

?>


再说说如何获取域名对应的IP地址:

在php中可以使用内置函数gethostbyname获取域名对应的IP地址,比如:
<?php
echo gethostbyname("www.bnxb.com");
?>


以上会输出域名所对应的的IP。
对于做了负载与cdn的域名来讲,可能返回的结果会有不同。
顶(0)
踩(0)
最新评论