Геокодирование 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']; ?>
Но когда я вставляю его, я получаю ошибку сервера.
Как бы я это сделал?
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); ?>" />
$pageContent = file_get_contents('http://freegeoip.net/json/' . $_SERVER['REMOTE_ADDR']);
Нет необходимости передавать эхо в строковый параметр... просто объединитесь с .
.
В последнее время я сам нуждаюсь в услугах GeoIP
в каком-то проекте.
Я создал ** PHP wrapper
**, на случай, если другие ищут для этого помощника PHP
.
Можно найти по адресу https://github.com/DaanDeSmedt/FreeGeoIp-PHP-Wrapper
Поскольку 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;
}
}
Вы должны адаптировать возвращаемое значение к нужным вам данным.