Подтвердить что ты не робот

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

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

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

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

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

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

Но dreamhost, похоже, имеет старую версию whois (4.7.5), поэтому я получаю эту ошибку на выделение IP-адресов:

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

Итак, если кто-то не знает, как получить бинарную версию более новой версии whois на Dreamhost im stuck.

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

4b9b3361

Ответ 1

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

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

возвращает

US

Удачи,

- Джед

EDIT: @Mint Вот ссылка на API на hostip.info: http://www.hostip.info/use.html

Ответ 2

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

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

Ответ 3

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

Ответ 4

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

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

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

Ответ 5

Рассмотрим ipcountryphp (мой сайт, мой код, моя честь), так как он обеспечивает местную интернет-жизнь свободно обновленная база данных. Он быстрый и полностью автономный, подключаемый ко всем PHP 5.3, SQLite3 и выше. Очень быстрый поиск и отсутствие штрафов за производительность.

Достаточно с бесстыдной саморекламой, пусть серьезно:

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

Так что запросы сторонних служб остаются в фоновом режиме, а только локальные функции, которые не зависят от сторонних, входят в слои, с которыми пользователи взаимодействуют. Просто моя параноидальная параноидальная реакция на это:)

PS. Выше упомянутый script я написал также поддержку IPv6.

Ответ 6

Вот сайт с script, который я только что использовал. Единственная проблема заключается в том, что вы, вероятно, время от времени должны сами восстанавливать IP-адреса... что может быть больно и почему каждый говорит вам использовать внешний API. Но для меня это не было решением, так как я вытаскивал как 50 IP одновременно, а это значит, что я, вероятно, будет заблокирован. Таким образом, решение заключалось в использовании моего собственного script или для сохранения в DB, ​​но я снова вынимал изображения с внешних сайтов. В любом случае вот сайт, который я нашел script на:

http://coding-talk.com/f29/country-flag-script-8882/