基于IP地址的地理位置 - PHP [英] Geo Location based on IP Address - PHP

查看:126
本文介绍了基于IP地址的地理位置 - PHP的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我们正在寻找一种快速准确的方式来根据他们的IP获取访问者的位置。



我们尝试过ipinfodb.com,但他们的API使我们的网站在进行API调用时严重滞后。



您建议的其他服务是什么? 获取Geo-IP信息



请求地理IP服务器(netip.de)检查,返回IP所在的位置(主机,州

 <?php 
$ ip = '94 .219.40.96';
print_r(geoCheckIP($ ip));
// Array([domain] => dslb-094-219-040-096.pools.arcor-ip.net [country] => DE - Germany [state] => Hessen [town] => Erzhausen)

//获取包含geoip-infodata的数组
函数geoCheckIP($ ip)
{
//检查,如果提供的ip是有效的
if(!filter_var($ ip,FILTER_VALIDATE_IP))
{
throw new InvalidArgumentException(IP is not valid);
}

//联系ip-server
$ response = @ file_get_contents('http://www.netip.de/search?query='.$ip);
if(empty($ response))
{
throw new InvalidArgumentException(Error Geo-IP-Server error);


//包含从页面
$ patterns = array()中提取ip-geoinfo所需的所有正则表达式模式的数组。
$ patterns [domain] ='#Domain:(。*?)& nbsp; #i';
$ patterns [country] ='#Country:(。*?)& nbsp; #i';
$ patterns [state] ='#州/地区:(。*?)< br#i';
$ patterns [town] ='#City:(。*?)'i';

//存储结果的数组
$ ipInfo = array();

//检查ipserver对以上模式的响应
foreach($ patterns as $ key => $ pattern)
{
//将结果存储在数组中
$ ipInfo [$ key] = preg_match($ pattern,$ response,$ value)&& !空($ value [1])? $ value [1]:'未找到';
}

return $ ipInfo;
}

?>

Nomsayn?



如果您想要数据库使用此 http://www.phpandstuff.com/articles/geoip- country-lookup-with-php


We're looking for a fast and accurate way to get the visitors location based on their IP.

We have tried ipinfodb.com but their API made our website severely lag when making the API call.

What other services do you suggest?

解决方案

Get Geo-IP Information

Requests a geo-IP-server (netip.de) to check, returns where an IP is located (host, state, country, town).

<?php
       $ip='94.219.40.96';
       print_r(geoCheckIP($ip));
       //Array ( [domain] => dslb-094-219-040-096.pools.arcor-ip.net [country] => DE - Germany [state] => Hessen [town] => Erzhausen )

       //Get an array with geoip-infodata
       function geoCheckIP($ip)
       {
               //check, if the provided ip is valid
               if(!filter_var($ip, FILTER_VALIDATE_IP))
               {
                       throw new InvalidArgumentException("IP is not valid");
               }

               //contact ip-server
               $response=@file_get_contents('http://www.netip.de/search?query='.$ip);
               if (empty($response))
               {
                       throw new InvalidArgumentException("Error contacting Geo-IP-Server");
               }

               //Array containing all regex-patterns necessary to extract ip-geoinfo from page
               $patterns=array();
               $patterns["domain"] = '#Domain: (.*?)&nbsp;#i';
               $patterns["country"] = '#Country: (.*?)&nbsp;#i';
               $patterns["state"] = '#State/Region: (.*?)<br#i';
               $patterns["town"] = '#City: (.*?)<br#i';

               //Array where results will be stored
               $ipInfo=array();

               //check response from ipserver for above patterns
               foreach ($patterns as $key => $pattern)
               {
                       //store the result in array
                       $ipInfo[$key] = preg_match($pattern,$response,$value) && !empty($value[1]) ? $value[1] : 'not found';
               }

               return $ipInfo;
       }

?>

Nomsayn?

If you want a database use this http://www.phpandstuff.com/articles/geoip-country-lookup-with-php

这篇关于基于IP地址的地理位置 - PHP的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆