Получите местоположение страны IP с собственным PHP

Продолжайте читать, прежде чем Вы скажете, что это - дубликат, это не. (насколько я видел),

Я хочу получить код графства в php от клиента.

Да я знаю, что можно сделать это использующее внешние сайты или с подобными "geoip_record_by_name", но я не хочу зависеть от внешнего сайта, и я не могу установить "грушу" для php, поскольку я использую черепок хостинг Dreamhost.

Я думал, что мог просто сделать что-то вроде этого:

$output = shell_exec('whois '.$ip.' -H | grep country | awk \'{print $2}\'');
echo "<pre>$output</pre>";

Но dreamhost, кажется, имеет старую версию whois (4.7.5), таким образом, я преуспеваю, эта ошибка выделяют дюйм/с:

Unknown AS number or IP network. Please upgrade this program.

Таким образом, если кто-то не знает, как получить двоичный файл более новой версии whois на dreamhost, я застреваю.

Или есть ли иначе, я мог получить код страны от клиента, который загружает страницу?

17
задан hakre 13 June 2012 в 10:44
поделиться

4 ответа

Whois - это просто клиент службы Whois, поэтому технически вы все еще полагаетесь на внешний сайт. Для запросов, которые потерпели неудачу, вы можете попробовать вернуться к другому сайту для запроса, например, hostip.info, у которого есть приличный API и который кажется дружелюбным:

http://api.hostip.info/country.php?ip=4.2.2.2

возвращает

US

Удачи,

- jed

РЕДАКТИРОВАТЬ: @Mint Вот ссылка на API на hostip.info: http://www.hostip.info/use.html

27
ответ дан 30 November 2019 в 10:43
поделиться

Можете ли вы просто установить копию whois в свой домашний каталог и передать полный путь в shell_exec? Таким образом, вы не будете привязаны к их графику обновления.

2
ответ дан 30 November 2019 в 10:43
поделиться

MaxMind предоставляет бесплатный PHP-класс поиска страны по GeoIP (есть также бесплатный поиск страны и города) .

Вам нужен бит, упомянутый в разделе «Чистый модуль PHP». Это не требует от вас установки чего-либо или зависимости от них, а также не требует установки каких-либо специальных модулей PHP. Просто сохраните где-нибудь файл данных GeoIP, а затем используйте предоставленный им класс для взаимодействия с ним.

18
ответ дан 30 November 2019 в 10:43
поделиться

Альтернативное, несколько крайнее решение вашей проблемы:

  1. Загрузите версию базы данных стран MaxMind в формате CSV.
  2. Полоса извлеките ненужную информацию из CSV с помощью сценария и ...
  3. ... сгенерируйте стандартный файл PHP, который содержит структуру данных, содержащую IP-адрес в качестве ключа и код страны в качестве значения.
  4. Включите полученный файл в ваши обычные файлы проекта, и теперь у вас есть полностью внутренняя таблица поиска IP => кода страны.

Недостатком является то, что вам необходимо регулярно обновлять файл PHP из последней версии базы данных. Кроме того, это довольно неприятный способ сделать это в целом, и производительность может быть не самой лучшей :)

2
ответ дан 30 November 2019 в 10:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: