Получить страновое местоположение IP с родным PHP - PullRequest
17 голосов
/ 18 марта 2010

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

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

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

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

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

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

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

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

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

Ответы [ 8 ]

27 голосов
/ 23 марта 2010

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

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

возвращает

US

Удачи,

- Джед

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

18 голосов
/ 18 марта 2010

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

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

2 голосов
/ 26 марта 2010

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

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

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

2 голосов
/ 18 марта 2010

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

1 голос
/ 09 апреля 2013

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

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

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

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

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

0 голосов
/ 17 декабря 2013

вот и один из них. просто измените IP на переменную:
http://api.codehelper.io/ips/?callback=codehelper_ip_callback&ip=143.3.87.193

0 голосов
/ 20 августа 2013
0 голосов
/ 28 августа 2012

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

http://coding -talk.com / F29 / страна-флаг-скрипт-8882 /

...