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.