php中獲取指定IP的物理地址的代碼(正則表達(dá)式)
更新時(shí)間:2011年06月23日 13:08:54 作者:
網(wǎng)站常用的模塊可能出了注冊(cè)、登陸、發(fā)稿、留言、評(píng)論,剩下比較重要的也許就是獲取IP并作相應(yīng)的數(shù)據(jù)處理了。
自己搭建IP數(shù)據(jù)庫占資源,而且更新不便,何不使用現(xiàn)成的IP查詢呢?下面自己寫了個(gè)獲取IP物理地址的PHP代碼(有一定的瑕疵,請(qǐng)高手不吝賜教)
<!DOCTYPE html>
<html lang="en">
<head>
<title></title>
<meta charset="UTF-8" />
<meta name="author" content="" />
<meta name="keywords" content="" />
<meta name="description" content="" />
</head>
<body>
<?php
$ipAddr = "218.75.124.100";
$ip138Addr = "http://www.ip138.com/ips8.asp?ip=".$ipAddr."&action=2";
$contents = file_get_contents($ip138Addr);
$pattern = "/\<li.+?\/li\>/";
$string = $contents;
preg_match_all($pattern,$string,$addrArray);
$num = count($addrArray[0]);
for($i = 0;$i<$num;$i++){
echo $addrArray[0][$i] = mb_convert_encoding($addrArray[0][$i],"UTF-8", "GB2312");
switch($i) {
case 0:$str = "<li>本站主數(shù)據(jù):</li>";break;
case 1:$str = "<li>參考數(shù)據(jù)一:</li>";break;
case 2:$str = "<li>參考數(shù)據(jù)二:</li>";break;
case 3:$str = "<li>參考數(shù)據(jù)三:</li>";break;
case 4:$str = "<li>參考數(shù)據(jù)四:</li>";break;
case 5:$str = "<li>參考數(shù)據(jù)六:</li>";break;
case 6:$str = "<li>參考數(shù)據(jù)七:</li>";break;
}
$addrArray[0][$i] = trim($addrArray[0][$i],$str);
}
$addrArray[0][0] = trim($addrArray[0][0],":");
echo "<pre>";
print_r($addrArray);
echo "</pre>";
?>
</body>
</html>
這段代碼采用訪問http://www.ip138.com后使用正則表達(dá)式進(jìn)行截取部分內(nèi)容,其中正則表達(dá)式是自己寫的。

開始還好,下面的處理結(jié)果出現(xiàn)了亂碼,如果把$str(去除字符串首尾的標(biāo)識(shí))定義的字符串就沒有了亂碼;而且再加一個(gè)單獨(dú)的去除“:”的語句,就可以實(shí)現(xiàn)無亂碼的現(xiàn)象,不知道為什么了……
正則表達(dá)式——獲取指定IP的物理地址(二) chinaz數(shù)據(jù)
上一個(gè)IP獲取的結(jié)果不是很完善,究其原因是因?yàn)閕p138的IP解析應(yīng)對(duì)國外的地址時(shí)不是很詳細(xì),所以又重新寫了個(gè)用Chianz.com的代碼。
<!DOCTYPE html>
<html lang="en">
<head>
<title></title>
<meta charset="UTF-8" />
<meta name="author" content="" />
<meta name="keywords" content="" />
<meta name="description" content="" />
</head>
<body>
<?php
$ipAddr = "4.4.44.4";
$ipChinazAddr = "http://tool.chinaz.com/IP/?IP=".$ipAddr;
$contents = file_get_contents($ipChinazAddr);
$pattern = "/\=\=\>\>.+\<\/strong\>\<br \/\>/";
$string = $contents;
preg_match_all($pattern,$string,$addrArray);
$num = count($addrArray[0]);
$pattern = "/(==>>).+(==>>\s)/";
for($i = 0;$i<$num;$i++){
$addrArray[0][$i] = preg_replace($pattern,"",$addrArray[0][$i]);
}
echo "<pre>";
print_r($addrArray);
echo "</pre>";
?>
</body>
</html>
結(jié)果還令人滿意
復(fù)制代碼 代碼如下:
<!DOCTYPE html>
<html lang="en">
<head>
<title></title>
<meta charset="UTF-8" />
<meta name="author" content="" />
<meta name="keywords" content="" />
<meta name="description" content="" />
</head>
<body>
<?php
$ipAddr = "218.75.124.100";
$ip138Addr = "http://www.ip138.com/ips8.asp?ip=".$ipAddr."&action=2";
$contents = file_get_contents($ip138Addr);
$pattern = "/\<li.+?\/li\>/";
$string = $contents;
preg_match_all($pattern,$string,$addrArray);
$num = count($addrArray[0]);
for($i = 0;$i<$num;$i++){
echo $addrArray[0][$i] = mb_convert_encoding($addrArray[0][$i],"UTF-8", "GB2312");
switch($i) {
case 0:$str = "<li>本站主數(shù)據(jù):</li>";break;
case 1:$str = "<li>參考數(shù)據(jù)一:</li>";break;
case 2:$str = "<li>參考數(shù)據(jù)二:</li>";break;
case 3:$str = "<li>參考數(shù)據(jù)三:</li>";break;
case 4:$str = "<li>參考數(shù)據(jù)四:</li>";break;
case 5:$str = "<li>參考數(shù)據(jù)六:</li>";break;
case 6:$str = "<li>參考數(shù)據(jù)七:</li>";break;
}
$addrArray[0][$i] = trim($addrArray[0][$i],$str);
}
$addrArray[0][0] = trim($addrArray[0][0],":");
echo "<pre>";
print_r($addrArray);
echo "</pre>";
?>
</body>
</html>
這段代碼采用訪問http://www.ip138.com后使用正則表達(dá)式進(jìn)行截取部分內(nèi)容,其中正則表達(dá)式是自己寫的。

開始還好,下面的處理結(jié)果出現(xiàn)了亂碼,如果把$str(去除字符串首尾的標(biāo)識(shí))定義的字符串就沒有了亂碼;而且再加一個(gè)單獨(dú)的去除“:”的語句,就可以實(shí)現(xiàn)無亂碼的現(xiàn)象,不知道為什么了……
正則表達(dá)式——獲取指定IP的物理地址(二) chinaz數(shù)據(jù)
上一個(gè)IP獲取的結(jié)果不是很完善,究其原因是因?yàn)閕p138的IP解析應(yīng)對(duì)國外的地址時(shí)不是很詳細(xì),所以又重新寫了個(gè)用Chianz.com的代碼。
復(fù)制代碼 代碼如下:
<!DOCTYPE html>
<html lang="en">
<head>
<title></title>
<meta charset="UTF-8" />
<meta name="author" content="" />
<meta name="keywords" content="" />
<meta name="description" content="" />
</head>
<body>
<?php
$ipAddr = "4.4.44.4";
$ipChinazAddr = "http://tool.chinaz.com/IP/?IP=".$ipAddr;
$contents = file_get_contents($ipChinazAddr);
$pattern = "/\=\=\>\>.+\<\/strong\>\<br \/\>/";
$string = $contents;
preg_match_all($pattern,$string,$addrArray);
$num = count($addrArray[0]);
$pattern = "/(==>>).+(==>>\s)/";
for($i = 0;$i<$num;$i++){
$addrArray[0][$i] = preg_replace($pattern,"",$addrArray[0][$i]);
}
echo "<pre>";
print_r($addrArray);
echo "</pre>";
?>
</body>
</html>
結(jié)果還令人滿意


以上是本人寫的兩個(gè)獲取IP物理地址的代碼,作為一個(gè)初學(xué)者,沒事的時(shí)候?qū)憣懞唵蔚拇a也還是一件挺有意思的事。但是畢竟是一個(gè)初學(xué)者,不能更好的注意安全性、空間利用率、時(shí)間效率等問題,還望各位留下你的足跡,小弟謝了
您可能感興趣的文章:
- Shell正則表達(dá)式驗(yàn)證IP地址
- javascript正則表達(dá)式模糊匹配IP地址功能示例
- IP地址正則表達(dá)式匹配方法
- 匹配 IP 地址與域名的正則表達(dá)式
- Shell腳本中通過正則表達(dá)式匹配IP地址
- javascript使用正則表達(dá)式檢測(cè)IP地址
- Python正則表達(dá)式匹配ip地址實(shí)例
- C#正則表達(dá)式分解和轉(zhuǎn)換IP地址實(shí)例(C#正則表達(dá)式大全 c#正則表達(dá)式語法)
- javascript 獲取鏈接文件地址中第一個(gè)斜線內(nèi)的正則表達(dá)式
- js:校驗(yàn)IPv6地址的正則表達(dá)式
- 正則表達(dá)式驗(yàn)證IPV4地址功能實(shí)例分析
相關(guān)文章
PHP使用反射機(jī)制實(shí)現(xiàn)查找類和方法的所在位置
這篇文章主要介紹了PHP使用反射機(jī)制實(shí)現(xiàn)查找類和方法的所在位置,實(shí)例分析了PHP反射機(jī)制的原理與使用反射機(jī)制實(shí)現(xiàn)對(duì)類和方法的查找技巧,需要的朋友可以參考下2016-04-04
php使用curl實(shí)現(xiàn)ftp文件下載功能
這篇文章主要為大家詳細(xì)介紹了php使用curl實(shí)現(xiàn)ftp文件下載功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05
php安全開發(fā) 添加隨機(jī)字符串驗(yàn)證,防止偽造跨站請(qǐng)求
偽造跨站請(qǐng)求比較難以防范,而且危害巨大,攻擊者可以通過這種方式惡作劇,發(fā)spam信息,刪除數(shù)據(jù)等等。那怎么防范偽造跨站攻擊呢2013-02-02

