Геокодирование IP с использованием PHP echo


Я пытаюсь отобразить страну пользователей (на основе их IP-адреса) в форме входного значения.

Вот мой код до сих пор..

<input style="display:block" type="text" name="country" id="country" value="<?php               
$pageContent = file_get_contents('http://freegeoip.net/json/echo $_SERVER['REMOTE_ADDR']');
$parsedJson  = json_decode($pageContent);
echo $parsedJson->country_name; ?>" />

Я использую PHP JSON-декодирование для получения данных из"http://freegeoip.net/json /(IP-АДРЕС)".

Этот веб-сайт геокодирует IP-адрес и возвращает название страны.

Что я хочу сделать, так это иметь возможность заменить IP-адрес пользователя на этот веб-адрес, который затем вернет название страны пользователя. Лучший способ, который я мог придумать из был с помощью

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

Но когда я вставляю его, я получаю ошибку сервера.

Как бы я это сделал?

Author: user990175, 2012-05-29

4 answers

$pageContent = file_get_contents('http://freegeoip.net/json/' . $_SERVER['REMOTE_ADDR']);

Вы не можете использовать echo внутри функции. Вместо этого следует использовать оператор объединения .

Кроме того, лучший код был бы примерно таким:

<?php               
$pageContent = file_get_contents('http://freegeoip.net/json/' . $_SERVER['REMOTE_ADDR']);
$parsedJson  = json_decode($pageContent);
?>
<input style="display:block" type="text" name="country" id="country" value="<?php echo htmlspecialchars($parsedJson->country_name); ?>" />
 11
Author: Jeroen, 2012-05-29 20:08:25
$pageContent = file_get_contents('http://freegeoip.net/json/' . $_SERVER['REMOTE_ADDR']);

Нет необходимости передавать эхо в строковый параметр... просто объединитесь с ..

 2
Author: Brad, 2012-05-29 19:55:03

В последнее время я сам нуждаюсь в услугах GeoIP в каком-то проекте. Я создал ** PHP wrapper**, на случай, если другие ищут для этого помощника PHP.

Можно найти по адресу https://github.com/DaanDeSmedt/FreeGeoIp-PHP-Wrapper

 1
Author: daan.desmedt, 2017-03-30 09:33:20

Поскольку Freegeoip станет платной услугой (https://ipstack.com /), если вам нужна бесплатная простая услуга, вы можете использовать ip-api.com вместо того, чтобы freegeoip.net :

function getDataOfIp($ip) {
    try {
        $pageContent = file_get_contents('http://ip-api.com/json/' . $ip);
        $parsedJson  = json_decode($pageContent);
        return [
            "country_name" => $parsedJson->country,
            "country_code" => $parsedJson->countryCode,
            "time_zone" => $parsedJson->timezone
        ];
    } 
    catch (Exception $e) {
        return null;
    }
}

Вы должны адаптировать возвращаемое значение к нужным вам данным.

 0
Author: jedema, 2018-06-19 10:32:48