Продолжайте читать, прежде чем Вы скажете, что это - дубликат, это не. (насколько я видел),
Я хочу получить код графства в 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, я застреваю.
Или есть ли иначе, я мог получить код страны от клиента, который загружает страницу?
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
Можете ли вы просто установить копию whois в свой домашний каталог и передать полный путь в shell_exec? Таким образом, вы не будете привязаны к их графику обновления.
MaxMind предоставляет бесплатный PHP-класс поиска страны по GeoIP (есть также бесплатный поиск страны и города) .
Вам нужен бит, упомянутый в разделе «Чистый модуль PHP». Это не требует от вас установки чего-либо или зависимости от них, а также не требует установки каких-либо специальных модулей PHP. Просто сохраните где-нибудь файл данных GeoIP, а затем используйте предоставленный им класс для взаимодействия с ним.
Альтернативное, несколько крайнее решение вашей проблемы:
Недостатком является то, что вам необходимо регулярно обновлять файл PHP из последней версии базы данных. Кроме того, это довольно неприятный способ сделать это в целом, и производительность может быть не самой лучшей :)