程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> php中獲取指定IP的物理地址的代碼(正則表達式)

php中獲取指定IP的物理地址的代碼(正則表達式)

編輯:PHP綜合
自己搭建IP數據庫占資源,而且更新不便,何不使用現成的IP查詢呢?下面自己寫了個獲取IP物理地址的PHP代碼(有一定的瑕疵,請高手不吝賜教)
復制代碼 代碼如下:
<!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>本站主數據:</li>";break;
case 1:$str = "<li>參考數據一:</li>";break;
case 2:$str = "<li>參考數據二:</li>";break;
case 3:$str = "<li>參考數據三:</li>";break;
case 4:$str = "<li>參考數據四:</li>";break;
case 5:$str = "<li>參考數據六:</li>";break;
case 6:$str = "<li>參考數據七:</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後使用正則表達式進行截取部分內容,其中正則表達式是自己寫的。

開始還好,下面的處理結果出現了亂碼,如果把$str(去除字符串首尾的標識)定義的字符串就沒有了亂碼;而且再加一個單獨的去除“:”的語句,就可以實現無亂碼的現象,不知道為什麼了……
正則表達式——獲取指定IP的物理地址(二) chinaz數據
上一個IP獲取的結果不是很完善,究其原因是因為ip138的IP解析應對國外的地址時不是很詳細,所以又重新寫了個用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>

結果還令人滿意

  以上是本人寫的兩個獲取IP物理地址的代碼,作為一個初學者,沒事的時候寫寫簡單的代碼也還是一件挺有意思的事。但是畢竟是一個初學者,不能更好的注意安全性、空間利用率、時間效率等問題,還望各位留下你的足跡,小弟謝了

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved