Есть бесплатные и простые API, которые вы можете использовать, например:
Какой из них выглядит наиболее заслуживающим доверия, зависит от вас:)
В противном случае на вашем сервере есть сценарии, основанные на локальных базах данных. Тем не менее, данные базы данных должны регулярно обновляться. Проверьте это:
НТН!
Edit:
И, конечно же, в зависимости от вашего проекта вы, возможно, захотите ознакомиться с функциями HTML5 Location . Вы еще не можете использовать их в Internet Explorer (IE9 будет поддерживать его, еще долгий путь), но если ваша аудитория в основном на мобильных устройствах или использует Safari / Firefox, определенно стоит посмотреть на это!
Получив координаты, вы можете преобразовать их в геокодирование в код страны. Опять же есть API, подобные этому:
Обновление, апрель 2013
Сегодня я бы порекомендовал использовать Geocoder , библиотеку PHP, которая позволяет очень легко геокодировать IP-адреса, а также данные почтовых адресов.
*** Обновление, сентябрь 2016
Поскольку политика конфиденциальности Google изменилась, вы не можете использовать API геолокации HTML5, если на вашем сервере нет сертификата HTPPS или пользователь не позволяет вам проверить его местоположение. Теперь вы можете использовать IP-адрес пользователя и зарегистрироваться в PHP или получить сертификат HTTPS.