PHP Laravel: Как определить город посетителя

В этом уроке я хочу поделится с вами наболевшей проблемой: как определить город / страну / местоположение посетителей вашего сайта при помощи PHP на примере фреймворка Laravel 8.

Ранее мы в своих проектах использовали сервис ipinfo но во первых далеко не все наши клиенты хотят платить дополнительные 50€ в месяц за определения города пользователей, а во вторых этот сервис не всегда точно определяет города, ну по крайней мере в западной европе.

Для получения информации о местонахождении пользователя мы будем использовать пакет stevebauman/location который получает данные сразу из нескольких источников, в том числе и с выше упомянутого ipinfo но бесплатно =) А на халяву как гласит народная мудрость и уксус сладок!

Итак давайте установим наш пакет, для этого перейдите в терминале в папку вашего проекта и при помощи композера подключите данный пакет:

composer require stevebauman/location

Если вы используете Laravel версии ниже 5.5 то подключите сервис провайдеры и фасады в файле config/app.php, если у вас версия 5.5 или более новая просто пропустите этот шаг

'providers' => [
    Stevebauman\Location\LocationServiceProvider::class,

],

'aliases' => [
    'Location' => 'Stevebauman\Location\Facades\Location',
],

Теперь для тестов просто создайте новый роут который выведет на экран результат работы библиотеки:

Route::get('ip', function () {
    $ip = $_SERVER['REMOTE_ADDR'];
    $data = \Location::get($ip);
    dd($data);
});

Теперь если вы перейдёте по адресу ВАШСАЙТ.КОМ/ip то увидите нечто подобное:

Дальше уже можно перенести этот вызов в ваши контроллеры и запрашивать нужные данные как свойства класса например:

$data->countryName

А на этом у меня всё. Создавайте удобные приложения =)

Update cookies preferences