菜单

正则获取IP归属

2013 年 5 月 20 日 - 技术类

之前曾经接手了一个很坑爹的任务,把上级给的一大堆IP查出IP地址归属,当时没有接口直接批量查询,只好写了一段坑爹的批量查询代码,现在翻出来,觉得挺有分享意义的,里面用到很多初学PHP时需要了解和学习的知识,比如CSV文件流处理,php大数据量查询时执行同时输出结果等等,特来分享下:

请看代码:

//正则获取IP归属
function getip($ip)
{
$html = file_get_contents("http://www.ip138.com/ips138.asp?ip=".$ip);//查询地址

$html = iconv('GBK','UTF-8',$html);//字符转码

$tmp = preg_match('/本站主数据:(.*)<\/li>/',$html,$matches);//正则匹配
$data = explode('</li>',$matches[0]);
$rs = str_replace('本站主数据:','',$data[0]);
return $rs;
}

ob_start();
ob_end_flush();//关闭浏览器输出
set_time_limit(0);//关闭超时限制

$start = microtime();//记录开始时间
echo str_pad(' ',1024);//先输出1024字符

$ip = fopen('ip.csv', 'r');//查询的ip地址CSV文件
$fp = fopen('file.csv', 'w');//记录查询后的ip地址
while (!feof($ip)) {
$row = trim(fgets($ip));
$address = getip($row);

echo "$row $address<br/>";

fputcsv($fp, array($row,$address));
ob_flush();//输出到浏览器
flush();
}

fclose($ip);
fclose($fp);

echo '用时:'.microtime()-$start."<br/>";

发表评论

电子邮件地址不会被公开。 必填项已用*标注