Как сделать поиск геоипа в php?

Все учебники, которые я видел, указывали на такие функции, как geoip_record_by_name. Я всегда получаю эту ошибку: Fatal error: Call to undefined function geoip_record_by_name() in /home/<acct>/public_html/geoip.php on line <line>

Я на "общем" хостинге, то есть у меня нет доступа для установки расширения PECL geoip.

Какие есть другие (бесплатные!) способы поиска геоip? Предпочтительно те, которые не зависят от внешней службы?


person Cyclone    schedule 27.06.2011    source источник
comment
Есть несколько сервисов, которые позволяют вам загрузить базу данных с грубой детализацией в формате csv, которая снизит IPS до уровня страны. Но в противном случае вы застряли с внешним сервисом. Вероятно, вы могли бы воссоздать эту функцию geoip_*() с некоторыми вызовами CURL, если API провайдера не слишком ужасен.   -  person Marc B    schedule 28.06.2011
comment
Как эти службы определяют, где находится ваш IP-адрес? Как ОНИ получают места для начала? Как я мог вместо этого создать свою собственную базу данных?   -  person Cyclone    schedule 28.06.2011
comment
Зачем создавать собственную базу данных, когда есть бесплатные API, которые предоставят вам свои? Одному человеку потребовались бы годы, чтобы создать собственную базу данных с нуля.   -  person Steve Robbins    schedule 28.06.2011
comment
@imoda Как они вообще генерируются?   -  person Cyclone    schedule 28.06.2011
comment
@Cyclone Я бы не знал подробностей. Я предполагаю, что это довольно тщательный процесс.   -  person Steve Robbins    schedule 28.06.2011
comment
@imoda: И этот процесс повлечет за собой...? Тесты скорости пинга? Ручной ввод данных пользователя? Случайное угадывание? Делаете запрос в правительственную базу данных? Дартс? Переворачивать биты с помощью бабочек? Я полагаю, что можно триангулировать местоположение пользователя, если у вас достаточно серверов для проверки скорости.   -  person Cyclone    schedule 28.06.2011
comment
@Cyclone Я бы не знал подробностей.   -  person Steve Robbins    schedule 28.06.2011
comment
@Cyclone: ​​они выполняют беготню и анализируют базы данных IANA для присвоения блоков IP-адресов, а также следят за всем по цепочке присвоений и связываются с каждым держателем блока, чтобы спросить: «Эй, где ваши IP-адреса?»   -  person Marc B    schedule 28.06.2011
comment
@imoda: Значит, ваше предположение не основано на доказательствах? Извините, я просто очень смущен тем, как вы могли думать, что это займет вечность и будет кропотливым процессом, когда вы понятия не имеете о внутренней работе. Похоже, ты так же в темноте, как и я, лол.   -  person Cyclone    schedule 28.06.2011


Ответы (2)


Если у вас есть сервер MySQL, есть базы данных IP, которые вы можете использовать и установить бесплатно, затем выполните $_SERVER['REMOTE_ADDR'] и запустите его для данных базы данных.

т. е. (на основе некоторого произвольного db)

<?php

    $result = mysql_query("SELECT *
                          FROM ips
                          WHERE ip = {$_SERVER['REMOTE_ADDR']}
                          LIMIT 1") or die(mysql_error());

    $row = mysql_fetch_assoc($result);

    $city = $row['city'];
    $state = $row['state'];
    $country = $row['country'];

?>

Некоторые базы данных (или просто google это): http://www.ipinfodb.com/ip_database.php

ИЗМЕНИТЬ

Вы также можете выполнять запросы JSON/XML из других API и анализировать данные:

т. е. (снова используя ipinfodb.com)

$doc->loadXML(file_get_contents("http://api.ipinfodb.com/v2/ip_query.php?key=your_key&ip=" . $_SERVER['REMOTE_ADDR'] . "&timezone=false")); 

$country = $doc->getElementsByTagName('CountryName')->item(0)->nodeValue;
person Steve Robbins    schedule 27.06.2011
comment
Есть ли способ создать свою собственную базу данных? - person Cyclone; 28.06.2011
comment
Оставил комментарий к исходному вопросу. Конечно, вы МОЖЕТЕ создать свою собственную базу данных, но на самом деле нет быстрого и простого способа сделать это. - person Steve Robbins; 28.06.2011

Вы можете попробовать hostip.info, Maxmind или ip2location, чтобы назвать несколько. Они просты в использовании с PHP и могут использоваться на виртуальном хостинге. Некоторые из них также имеют автономные опции.

person webbiedave    schedule 27.06.2011
comment
Первая и последняя разошлись на добрых 50 миль, Maxmind был немного ближе, но ненамного... - person Cyclone; 28.06.2011
comment
@Cyclone: ​​вы получаете то, за что платите. - person webbiedave; 28.06.2011