В данной статье https://phpjs.ru/2017/03/21/google-geolocation-api/ я писал как получить координаты по ip и далее адрес по координатам., используя яндекс, гугл апи. Практика показала, что оба сервиса никчемны. Во-первых, апи гугл платно. Во вторых апи яндекса постоянно блочиться из-за каких то там их политик конфид-ти. Тем временем адрес и координаты можно получить 2 строчками кода.
function getIPYou(){
if (!empty($_SERVER['HTTP_CLIENT_IP'])){
//check ip from share internet
$ip = $_SERVER['HTTP_CLIENT_IP'];
}elseif(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){
//to check ip is pass from proxy
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
$ip = $_SERVER['REMOTE_ADDR'];
}
return $ip;
}
$city = json_decode(file_get_contents('http://ip-api.com/json/'.getIPYou() . '?lang=ru'), true);
если allow_url_fopen = false и нет возможности поменять
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://ip-api.com/json/'.getIPYou() . '?lang=ru');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$city = curl_exec($ch);
$city = json_decode($city, true);
curl_close($ch);
в ответе даже адрес уже есть
array(14) {
["status"]=>
string(7) "success"
["country"]=>
string(12) "Россия"
["countryCode"]=>
string(2) "RU"
["region"]=>
string(2) "TA"
["regionName"]=>
string(18) "Татарстан"
["city"]=>
string(31) "Набережные Челны"
["zip"]=>
string(6) "423822"
["lat"]=>
float(55.7866)
["lon"]=>
float(52.4385)
["timezone"]=>
string(13) "Europe/Moscow"
["isp"]=>
string(24) "JSC "ER-Telecom Holding""
["org"]=>
string(51) "CJSC "ER-Telecom Holding" Naberezhnye Chelny branch"
["as"]=>
string(30) "AS42116 JSC ER-Telecom Holding"
["query"]=>
string(11) "95.78.20.39"
}
Геокодирование
$latlng = '53.1813,50.1218';
$city = file_get_contents("https://geocode.xyz/$latlng?geoit=json");
ответ
Array
(
[statename] => Array
(
)
[distance] => 0.073
[elevation] => 41
[osmtags] => Array
(
[wikidata] => Q4178963
[boundary] => administrative
[name] => Железнодорожный район
[type] => boundary
[admin-level] => 9
)
[state] => RU
[latt] => 53.18175
[city] => Samara
[prov] => RU
[geocode] => SAMARA-NNBVZ
[geonumber] => 8481645241783
[country] => Russian Federation
[stnumber] => Array
(
)
[staddress] => Нечаевская улица
[inlatt] => 53.18130
[alt] => array ...
[timezone] => Europe/Samara
[region] => Samara Oblast
[postal] => 443041
[poi] => array ...
[longt] => 50.12260
[remaining_credits] => Array
(
)
[confidence] => 0.9
[inlongt] => 50.12180
[class] => residential
[altgeocode] => TASHM-NNBVZ
)