itsource

PHP를 사용하여 IP 주소 국가 가져오기

mycopycode 2022. 9. 13. 22:16
반응형

PHP를 사용하여 IP 주소 국가 가져오기

이상적으로는 임의의 웹 브라우저에서 조회할 수 있는 PHP 스크립트를 조합하려고 합니다.PHP 스크립트에 액세스한 IP 주소의 국가를 반환합니다.

이것이 가능한가, 아니면 더 나은 해결책이 있는가?

다음과 같은 사용하기 쉬운 무료 API가 있습니다.

어느 쪽이 가장 신뢰성이 있다고 생각되는지는, 고객에게 달려 있습니다.

그렇지 않으면 서버의 로컬 데이터베이스를 기반으로 하는 스크립트가 있습니다.그러나 데이터베이스 데이터는 정기적으로 업데이트해야 합니다.이것 좀 봐.

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;

위치 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 콜백솔루션이 준비되어 있습니다.

  • JSON : https://geoip-db.com/json/
  • JSONP: https://geoip-db.com/json/geoip.php?jsonp=callback
<?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

반응형