PHP를 사용하여 IP 주소 국가 가져오기
이상적으로는 임의의 웹 브라우저에서 조회할 수 있는 PHP 스크립트를 조합하려고 합니다.PHP 스크립트에 액세스한 IP 주소의 국가를 반환합니다.
이것이 가능한가, 아니면 더 나은 해결책이 있는가?
다음과 같은 사용하기 쉬운 무료 API가 있습니다.
- http://ipinfodb.com/ip_location_api.php
- http://www.ipgeo.com/api/
- http://ip2.cc/
- http://www.geobytes.com/IpLocator.htm
- https://iplocate.io/
- 그리고 다른 많은 것들도요.
어느 쪽이 가장 신뢰성이 있다고 생각되는지는, 고객에게 달려 있습니다.
그렇지 않으면 서버의 로컬 데이터베이스를 기반으로 하는 스크립트가 있습니다.그러나 데이터베이스 데이터는 정기적으로 업데이트해야 합니다.이것 좀 봐.
HTH!
편집: 물론 프로젝트에 따라서는 HTML5 로케이션 기능을 참조할 수도 있습니다.Internet Explorer에서는 아직 사용할 수 없습니다(IE9은 아직 지원하지만 아직 멀지만 모바일 기기나 Safari/Firefox를 주로 사용하는 사용자라면 꼭 확인해 보시기 바랍니다.
일단 좌표를 얻으면 국가 코드로 역방향으로 지리 코드화할 수 있습니다.다음과 같은 API가 있습니다.
- 예: http://ws.geonames.org/countryCode?lat=47.03&lng=10.2
- 기타 API : http://www.geonames.org/export/ws-overview.html
4월 갱신 ★★★★★★★★★★★
오늘날에는 우편 주소 데이터뿐만 아니라 IP 주소도 쉽게 지오코딩할 수 있는 PHP 라이브러리인 지오코더를 사용할 것을 권장합니다.
9월 ****9월 갱신
Google의 개인 정보 보호 정책이 변경되었기 때문에 서버에 HTPPS 인증서가 없거나 사용자가 위치를 확인할 수 없는 경우 HTML5 Geolocation API를 사용할 수 없습니다.이제 사용자의 IP를 사용하여 PHP에 체크인하거나 HTTPS 인증서를 얻을 수 있습니다.
다양한 웹 API를 통해 이를 수행할 수 있습니다.다음은 제 서비스 http://ipinfo.io을 사용하는 예입니다.
$ip = $_SERVER['REMOTE_ADDR'];
$details = json_decode(file_get_contents("http://ipinfo.io/{$ip}"));
echo $details->country; // -> "US"
Web API는 빠르고 쉬운 훌륭한 솔루션입니다.다만, 많은 검색을 실시할 필요가 있는 경우는, 자신의 머신에 IP-> country 데이타베이스가 있는 것이 좋습니다.MaxMind는 GeoIP를 포함한 다양한 PHP 라이브러리에서 사용할 수 있는 무료 데이터베이스를 제공합니다.
MaxMind에서 ip-table을 다운로드할 수 있습니다.
http://www.maxmind.com/app/geolite
CSV를 데이터베이스로 Import합니다(ip_long_from + ip_long_to 인덱스를 작성하십시오).그 후, 다음의 조작을 간단하게 실시할 수 있습니다.
$iplong = ip2long($_SERVER['REMOTE_ADDR']);
// should use mysqli with prepared statements etc, but just an example
mysql_query("
SELECT country
FROM ip_table
WHERE $iplong BETWEEN ip_long_from AND ip_long_to
LIMIT 1
");
다음은 http://www.geoplugin.net/json.gp을 사용하는 예입니다.
$ip = $_SERVER['REMOTE_ADDR'];
$details = json_decode(file_get_contents("http://www.geoplugin.net/json.gp?ip={$ip}"));
echo $details;
- 자세한 것은, http://channasmcs.blogspot.com/2014/11/get-country-of-ip-address-with-php.html#sthash.7u3WCwQq.dpuf 를 참조해 주세요.
이 위치 API로 IP 주소에서 국가를 가져올 수 있습니다.
코드
echo file_get_contents('https://ipapi.co/8.8.8.8/country/');
대답
US
여기 바이올린이 있다.응답은text
예를 들어 특정 필드를 쿼리할 때 사용합니다. country
여여. 독요필 없이없돼 돼돼돼 돼돼 돼돼
S. : " ): " " " " p " 。https://ipapi.co/8.8.8.8/json/
은 '하다, 하다, 하다' 입니다.JSON
.
$country_code = trim(file_get_contents("http://ipinfo.io/{$ip_address}/country"))
국가 코드를 알려드립니다.
"기타 기본 확장" 아래에 있는 GeoIP 함수를 참조하십시오.http://php.net/manual/en/book.geoip.php
많은 답변이 있습니다만, 그 중 https://freegeoip.net/에 대해 언급하는 사람은 없습니다.
you you까 you you you you 15,000 queries per hour
대부분의 경우 이 정도면 충분하다고 생각합니다.그렇지 않으면 MaxMind GeoIP에서 로컬 데이터베이스를 사용하는 것을 고려해야 합니다.
Freegeoip은 오픈 소스이며 github에서 소스를 찾아 로컬로 배포하고 쿼리 제한을 제거할 수 있습니다.
또한 위도/경도/시간대 등의 유용한 정보를 제공합니다.
다음은 지리 위치 요청에 대한 다른 무료 API입니다.http://geoip.nekudo.com
응답은 JSON 형식입니다.또한 API 소스 코드를 github에서 사용할 수 있습니다.
가능하면 PHP의 GeoIP 확장을 설치하여 사용합니다.데비안 레니:
sudo wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
sudo gunzip GeoLiteCity.dat.gz
sudo mkdir -v /usr/share/GeoIP
sudo mv -v GeoLiteCity.dat /usr/share/GeoIP/GeoIPCity.dat
sudo apt-get install php5-geoip
# or sudo apt-get install php-geoip for PHP7
PHP로 시험해 보겠습니다.
$ip = $_SERVER['REMOTE_ADDR'];
$country = geoip_country_name_by_name($ip);
echo 'The current user is located in: ' . $country;
반환:
The current user is located in: Cameroon
저는 이 블로그 투고가 매우 도움이 된다고 생각했습니다.덕분에 살았어.http://www.techsirius.com/2014/05/simple-geo-tracking-system.html
기본적으로는 IP 데이터베이스 테이블을 설치하고 IP에 대해 mysql 쿼리를 실행하여 위치를 확인해야 합니다.
<?php
include 'config.php';
mysql_connect(DB_HOST, DB_USER, DB_PASSWORD) OR die(mysql_error());
mysql_select_db(DB_NAME) OR die(mysql_error());
$ip = $_SERVER['REMOTE_ADDR'];
$long = sprintf('%u', ip2long($ip));
$sql = "SELECT * FROM `geo_ips` WHERE '$long' BETWEEN `ip_start` AND `ip_end`";
$result = mysql_query($sql) OR die(mysql_error());
$ip_detail = mysql_fetch_assoc($result);
if($ip_detail){
echo $ip_detail['country']."', '".$ip_detail['state']."', '".$ip_detail['city'];
}
else{
//Something wrong with IP
}
웹 사이트에서 외부 서비스를 요청하지 않고 성능을 높이기 위해 최신 데이터베이스를 필요로 하는 경우 여기에서 최신 데이터베이스를 다운로드할 수 있습니다.
지금까지의 경험으로 볼 때, 이 데이터베이스로 안내된 이 서비스를 제외하고, 대부분의 다른 데이터베이스/apis가 내 위치를 포함/보고하지 못한 IP의 도시 및 국가 위치까지 훌륭하게 작동했기 때문에 이것을 추천합니다.
(테스트할 때 ip 로케이션은 "Iran"의 "Rasht" City에서 왔고, ip는 다음과 같습니다.2.187.21.235
에 필적45815275
)
따라서 어떤 서비스가 더 정확한지 잘 모를 경우 다음 서비스를 사용할 것을 권장합니다.
데이터베이스:http://lite.ip2location.com/databases
API 서비스:
https://www.geoip-db.com 의 서비스를 시험해 볼 수 있습니다.JSON 또는 JSONP 콜백솔루션이 준비되어 있습니다.
<?php
$json = file_get_contents("https://www.geoip-db.com/json");
$data = json_decode($json);
print $data->country_code . "<br>";
print $data->country_name . "<br>";
print $data->state . "<br>";
print $data->city . "<br>";
print $data->postal . "<br>";
print $data->latitude . "<br>";
print $data->longitude . "<br>";
print $data->IPv4 . "<br>";
?>
https://ip-api.io/을 사용하여 국가 이름, 도시 이름, 위도 및 경도를 얻을 수 있습니다.IPv6 를 서포트합니다.
ip address가 tor 노드인지 퍼블릭프록시인지 스팸메시지인지 알 수 있습니다.
Php 코드:
$result = json_decode(file_get_contents('http://ip-api.io/json/64.30.228.118'));
var_dump($result);
출력:
{
"ip": "64.30.228.118",
"country_code": "US",
"country_name": "United States",
"region_code": "FL",
"region_name": "Florida",
"city": "Fort Lauderdale",
"zip_code": "33309",
"time_zone": "America/New_York",
"latitude": 26.1882,
"longitude": -80.1711,
"metro_code": 528,
"suspicious_factors": {
"is_proxy": false,
"is_tor_node": false,
"is_spam": false,
"is_suspicious": false
}
저는 IPLocate.io에서 서비스를 실행하고 있습니다.이 서비스는 간단한 전화 한 통으로 무료로 접속할 수 있습니다.
<?php
$res = file_get_contents('https://www.iplocate.io/api/lookup/8.8.8.8');
$res = json_decode($res);
echo $res->country; // United States
echo $res->continent; // North America
echo $res->latitude; // 37.751
echo $res->longitude; // -97.822
var_dump($res);
그$res
오브젝트에는 다음과 같은 지리정보 필드가 포함됩니다.country
,city
,기타.
자세한 내용은 문서를 참조하십시오.
Ipdata.co은 이를 위해 확장 가능한 API를 제공합니다.10개의 글로벌 엔드 포인트로 매일 8억 이상의 요구를 처리할 수 있습니다.
또한 IPv4 또는 IPv6 주소의 조직, 통화, 시간대, 발신 코드, 플래그 및 Tor Exit Node 상태 데이터도 제공합니다.
인 php
php > $ip = '8.8.8.8';
php > $details = json_decode(file_get_contents("https://api.ipdata.co/{$ip}"));
php > echo $details->region;
California
php > echo $details->city;
Mountain View
php > echo $details->country_name;
United States
php > echo $details->location;
37.405991,-122.078514
부인
제가 만든 서비스입니다.
www.feedsalive.com 위젯을 사용하여 국가 정보와 마지막 페이지 정보도 가져옵니다.
언급URL : https://stackoverflow.com/questions/3650006/get-country-of-ip-address-with-php
'itsource' 카테고리의 다른 글
EF 코어 저속 벌크 인서트(80k 행까지) (0) | 2022.09.14 |
---|---|
MySQL 일부 외부 키 제거 (0) | 2022.09.14 |
JPA: 대규모 결과 세트에 대해 반복하기 위한 적절한 패턴은 무엇입니까? (0) | 2022.09.13 |
문자열이 JS의 regex와 일치하는지 확인합니다. (0) | 2022.09.13 |
query Selector 및 query SelectorJavaScript의 모든 vs getElementsByClassName 및 getElementById (0) | 2022.09.13 |