Не используйте разнесение !, ответ API - JSON, вместо этого вы должны сделать это:
$data = json_decode($contents, true);
$country = $data['country'];
$city = $data['city'];
и так далее для любого другого поля, которое вам нужно.
Кстати, вы также можете улучшить обнаружение IP-адресов с помощью этого кода, который поддерживает множественное обнаружение с поддержкой ipv4 и ipv6
if (isset($_SERVER['REMOTE_HOST'])) {
$ip = $_SERVER['REMOTE_HOST'];
} elseif (isset($_SERVER['HOST'])) {
$ip = $_SERVER['HOST'];
} elseif (isset($_SERVER['REMOTE_ADDR'])) {
$ip = $_SERVER['REMOTE_ADDR'];
} else {
$host = '';
}
$ip = str_replace("::ffff:","",$ip);//::ffff:127.127.127.127 en caso de jugo ipv6
С уважением и голосовать