PHP вычисляет диапазон длинных целых чисел подсети ip2long

Я пытаюсь определить, прибыл ли посетитель веб-сайта из страны ЕС, и если да, то покажу ему баннер согласия на использование файлов cookie в соответствии с их законодательством.

Я загрузил таблицу со списком IPv4 всех стран ЕС (например, 1.178.224.0/19) и загрузил ее в mySQL. В таблице 107000 строк. Я могу получить IP-адрес пользователей с помощью $_SERVER['REMOTE_ADDR']. Я ищу наиболее простой и быстрый способ проверки с помощью PHP, если IP-адрес пользователя попадает в диапазон.

Одна из идей заключалась в том, чтобы создать 2 столбца в таблице с начальным и конечным длинными целыми числами каждого IPv4. Веб-сайт изменит IP-адрес пользователя на длинное целое число с помощью ip2long(), а затем проверит, попадает ли он в диапазон двух столбцов любого IPv4. Не уверен, возможно ли это. Если это хорошая идея, как мне получить начальное и конечное длинное целое число IPv4-адреса?

Я нашел несколько решений, чтобы увидеть, попадает ли IP в диапазон (например, 1.178.224.0/19), указанный в моей таблице, но с 107000 строками это, вероятно, займет некоторое время для обработки. Я ищу решение, которое работает быстро, чтобы не тормозить каждого пользователя, находящегося за пределами страны ЕС.

1 ответ

Вместо того, чтобы пытаться реализовать геолокацию самостоятельно, вы можете использовать для этого бесплатный онлайн-сервис. Вы можете реализовать это довольно быстро. Возьмем, к примеру, этот сервис:

http://geolocation-db.com/documentation

Я бы использовал Javascript, а не PHP, и только когда пользователь находится в стране ЕС, вы всплываете баннер согласия на использование файлов cookie.

Другие вопросы по тегам