У сервиса IpGeoBase с 22 ноября 2019 по 25 ноября наблюдались проблемы - сервис висел. В результате чего определение IP адреса не работало и скрипт находящийся сейчас в втором листинге приводил к подвисанию ответа сайта примерно на 5 секунд. За несколько лет наблюдений за IpGeoBase это первое такое провисание. Тем не менее будет рассмотрен вариант использования какого либо аналогичного сервиса и скрипты будут доработаны для избежания зависаний на случай если проблемы у сервисов повторятся. Так же в листинге ниже представляю вариант определения geo встроенными классами Bitrix без использования IpGeoBase.
Так же 25 ноября пробовал собрать свою базу из нескольких доступных в Интернет(использовал https://apps.db.ripe.net/db-web-ui/api/whois/search?abuse-contact=true&ignore404=true&managed-attributes=true&resource-holder=true&flags=B&offset=0&limit=20&query-string=88.85.172.134 и гео класс встроенный в Bitrix) столкнулся с ситуацией, что в разных базах может быть разная информация о стране IP адреса, так например для IP-адреса 55.55.12.16 SupexGeo в Bitrix считает что страна США, а ripe.net что США. Тем не менее то что получилось доступно по адресу https://blog.ivru.net/geo/?ip=88.85.172.134, не торопитесь использовать поскольку названия полей как и адрес этого API может быть изменён. На текущий момент это бета версия.
PHP скрипт определяет информацию по текущему IP адресу клиента выполняющего запрос к серверу PHP.
Есть ещё вот такой URL для получения информации о IP адресе в формате JSON http://ipinfo.io/185.252.144.107/geo (для указанного IP адреса информация определена не корректно, на самом деле этот IP адрес относится к Финляндии, арендуется Российским хостинг оператором)
Ещё есть API от 2ip.ua, но бесплатно по ним только 10 запросов в день, адреса api https://api.2ip.ua/provider.json?ip=88.85.172.134 и https://api.2ip.ua/geo.json?ip=88.85.172.134 на скрине ниже пример данных которые возвращают указанные API. Для IP адреса 88.85.172.134 информация о городе возвращена не совсем корректно. Область указана верно - Ивановская, а вот город, который указан как "Гаврилов Посад" - указан не верно. Откуда взята данная информация не понятно, например tracert показывает адрес pppoe-landeh-88-85-172-143.ivnet.ru, то есть якобы IP относится к городу Верхний Ландех, который так же находится в Ивановской области и эта информация так же не корректна. На самом деле IP адрес является статическим и относится к городу Фурманов(так же Ивановской области).
Ещё в репозитории REMI для CentOs 7 можно выполнив команду yum install php-pecl-geoip установить стандартную штуку для работы с GEO в PHP. По идее работать с ней можно например следующим образом: var_dump(geoip_record_by_name($_SERVER["REMOTE_ADDR"])); как именно пока не выяснил, поскольку кроме установки указанной библиотеки ещё требуется скачать базу данных с адресами, чего я пока не делал. Предположительно файл базы данных городов скачивается по ссылке https://dev.maxmind.com/geoip/geoip2/geolite2/