Узнать город по IP

Узнать город пользователя по IP можно через сервис DaData (определяет только города России).

У сервиса есть бесплатный лимит в 10 000 запросов. Для использования надо зарегистрироваться и получить ключ.

Сначала надо установить библиотеку:

composer require hflabs/dadata

После чего можно будет определять город:

$token = "{ключ api}";
$dadata = new \Dadata\DadataClient($token, null);
$result = $dadata->iplocate('46.226.227.20');

$result['value']; // г Краснодар
$result['data']['city']; // Краснодар

В целях оптимизации рекомендуется сохранять полученный ответ от сервера, чтобы сразу возвращать город пользователя без отправки запросов на сервер.