Jak wyświetlić kraj, nazwę miasta w panelu?

0

Korzystam z Cpanel, chciałbym wyświetlić nazwę kraju i nazwę miasta na stronie logowania, coś takiego: Na przykład:

 Your IP address is :  xxx.xxx.xxx.xxx
 Your Country name is: USA 
 Your City name is:  Seattle

Aby uzyskać powyższe informacje, mogę tylko pokazać adres IP, wykonując następujący kod php:

<?php echo $_SERVER['REMOTE_ADDR']; ?>

Jak wyświetlić inne informacje o użytkowniku, takie jak nazwa kraju i nazwa miasta?

Proszę krok po kroku, jak to zrobić.

Jestem w
źródło

Odpowiedzi:

0

Prawdopodobnie będziesz chciał użyć interfejsu API GeoLocation .

ipinfo.io zapewnia prosty interfejs zwrotny w postaci zwykłego tekstu, ale, podobnie jak wiele interfejsów API geolokalizacji, wymaga płatnych wersji usługi, jeśli przekroczysz pewne ograniczenia (tj. w przypadku ipinfo.io potrzebujesz więcej niż 1000 żądań dziennie lub SSL) .

Na przykładzie wersji ipinfo.io innej niż JSON, kod PHP może wyglądać następująco:

<?php 

    // This turns on error display without messing with php.ini
    // Delete the following two lines in production

    ini_set('display_errors',1); 
    error_reporting(E_ALL);

    // We avoid using $_SERVER['REMOTE_ADDR'] directly with a custom variable
    $ip = $_SERVER['REMOTE_ADDR'];

    // Otherwise, using the $_SERVER['REMOTE_ADDR'] directly
    //$city = file_get_contents('http://ipinfo.io/'. $_SERVER['REMOTE_ADDR']. '/city');

    // Using our custom $ip variable

    $city = file_get_contents('http://ipinfo.io/'. $ip. '/city');
    $country = file_get_contents('http://ipinfo.io/'. $ip. '/country');

    //$region = file_get_contents('http://ipinfo.io/'. $ip. '/region');


    // An alternate formatting of City State, Country
    //echo $city.' '.$region.', ' .$country;

    // Print our variables. <br> is a standard HTML line break.
    echo 'Your IP address is:   '.$ip;
    echo '<br>';
    echo 'Your Country name is: '.$country;
    echo '<br>'; 
    echo 'Your City name is:    '.$city;
?>

Możesz pominąć wszystkie linie za pomocą //, ponieważ są to tylko komentarze / przykłady. Podobnie linie wyświetlania błędów (ini_set / error_reporting) służą wyłącznie do debugowania. Okresy przed i po zmiennych są niezbędne do konkatenacji. Adresy URL łączą się z

 Ex. http://ipinfo.io/123.123.123.123/city

i zwróć zwykły tekst w tej formie. Sprawdź stronę programistów ipinfo.io, aby dowiedzieć się więcej o tym, co można zwrócić. Powyższy kod zwraca:

Ex.
    Your IP address is :  xxx.xxx.xxx.xxx
    Your Country name is: US
    Your City name is:  Las Vegas

Alternatywnie, jeśli chcesz „Stany Zjednoczone” vs. „USA”, możesz spróbować wypróbować coś w rodzaju starszego API Geobytes City Details . Aby zwrócić „Stany Zjednoczone”:

<?php

    function getIP() {
      foreach (array('HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED', 'REMOTE_ADDR') as $key) {
         if (array_key_exists($key, $_SERVER) === true) {
           foreach (explode(',', $_SERVER[$key]) as $ip) {
             if (filter_var($ip, FILTER_VALIDATE_IP) !== false) {
                   return $ip;
                }
             } 
          }
       }
    }

    $tags=json_decode(file_get_contents('http://getcitydetails.geobytes.com/GetCityDetails?fqcn='. getIP()), true);

    // Prints all available members of the $tags array, in case we forget our options
    //print_r($tags);

    // $tags[geobytesipaddress]) creates a non-fatal error so we use '' quotes around the array elements.
    print_r('Your IP address is: ' .$tags['geobytesipaddress']);
    echo '<br>';
    print_r('Your Country name is: ' .$tags['geobytescountry']);
    echo '<br>'; 
    print_r('Your City name is:    ' .$tags['geobytescity']);

    ?>

To tylko nieznacznie zmodyfikowany przykładowy kod ze strony Geobytes. Jak napisano, kopiuje dane wyjściowe z pierwszego przykładu kodu, ale z pełną nazwą kraju:

Ex.
    Your IP address is :  xxx.xxx.xxx.xxx
    Your Country name is: United States
    Your City name is:  Las Vegas

Na marginesie, API Geobytes wydaje się obsługiwać kilka więcej opcji niż ipinfo.io i pozwala na znacznie wyższą nieopłaconą liczbę żądań (jeśli to ma znaczenie).

Anaksunaman
źródło
Och, dziękuję za doskonałą informację, kciuki w górę
Amin