Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Список городов и GeoIP


villord

Recommended Posts

Доброго времени суток, друзья.

Есть такой ресурс http://www.maxmind.com/app/geolite. Кажется многие им пользуются.

Там среди прочего предлагается бесплатная база городов в формате .dat

Доступна следующая ссылка для скачивания http://geolite.maxmi...LiteCity.dat.gz

Здесь описан порядок установки http://www.maxmind.c...allation?city=1

На сайте также можно скачать примеры реализации на разных языках, в том числе PHP

Вроде все просто, но на opencart не удается внедрить все до конца, при попытке доступа к файлам с соответствующими классами выдает ошибку доступа к файлу.

Ошибка сервера код 500. Непонятно, это opencart что-то запрещает или настройки сервера.

Код такой:

<?
// Подключаем необходимые классы
   include(HTTP_SERVER."geoip/geoipcity.php");
   include(HTTP_SERVER."geoip/geoip.php");
   include(HTTP_SERVER."geoip/geoipregionvars.php");
// Подключаем файл с данными
   $filename = HTTP_SERVER."/geoip/GeoLiteCity.dat";
// Использую методы из подключенных выше классов пытаемся получить массив данных о текущем регионе
// Вот тут возникает ошибка
   $gim = geoip_open($filename,GEOIP_STANDARD);
   $record = geoip_record_by_addr($gim,$_SERVER['REMOTE_ADDR']);
   print $record['country_code'] . " " . $record['country_code3'] . " " . $record['country_name'] . "\n";
   print $record['region'] . "\n";
   print $record['city'] . "\n";
   print $record['latitude'] . "\n";
   print $record['longitude'] . "\n";
   geoip_close($gim);
?>

Дамп ошибки примерно следующий

Warning: include([url="http://xn--_-htbdnodicd/geoip/geoipcity.php"]http://мой_домен/geoip/geoipcity.php[/url]'>http://мой_домен/geoip/geoipcity.php[/url]) [function.include]: failed to open stream: HTTP request failed!
HTTP/1.1 500 Internal Server Error in /home/юзер/domains/мой_домен/public_html/ecodom/catalog/controller/common/home.php on line 28
Warning: include() [function.include]: Failed opening '[url="http://xn--_-htbdnodicd/geoip/geoipcity.php"]http://мой_домен/geoip/geoipcity.php[/url]'>http://мой_домен/geoip/geoipcity.php[/url]' for inclusion (include_path='.:/usr/local/php5/lib/php') in /home/wgtest2rk/domains/wgtest2.rk.ua/public_html/ecodom/catalog/controller/common/home.php on line 28
Fatal error: Call to undefined function geoip_open() in /home/юзер/domains/мой_домен/public_html/ecodom/catalog/controller/common/home.php on line 32

Есть мысль что это именно проблема opencart, так как экспериментально в чистом php файле ошибок не дает.

И да, к вопросу зачем мне это, нужно реализовать автоподстановку города при регистрации и оформлении товара.

Файлы с примерами реализации на PHP прилагаю.

GeoLiteCity.dat.gz

php-1.11.tar.gz

Направьте пожалуйста, если где ошибся :)

Надіслати
Поділитися на інших сайтах


о да, я большой оригинал:)

а что Вы предлагаете? судя по тому что я вычитал у них на сайте предлагается именно такой подход...или я чего-то не так понял :oops:

Надіслати
Поділитися на інших сайтах


Я предлагаю читать сообщения об ошибках: там четко и ясно написано по-английски, что его озадачивает. Я написал то же самое по-русски.

Если до сих пор не понятно: да блин, на инклуды посмотрите. Вы же их не с сервера локально берете, а через *опу, извиняюсь. Интерпретатору PHP вместо того, чтобы взять локальный файл, надо сделать запрос к веб-серверу, дождаться от него файла и затем уже интерпретировать. К тому же на большинстве серверов это дело запрещено настройками.

Берите файлы с библиотеками локально, а не через HTTP_SERVER.

  • +1 2
Надіслати
Поділитися на інших сайтах


что-то я видимо туплю по жесткому :) Действительно при локальном инклюде файлы увидел, но теперь столкнулся с другой проблемой - выдает ошибку:

Fatal error: Cannot redeclare geoip_load_shared_mem() (previously declared in /home/wgtest2rk/domains/wgtest2.rk.ua/public_html/ecodom/geoip/geoip.inc:240) in /home/wgtest2rk/domains/wgtest2.rk.ua/public_html/ecodom/geoip/geoip.inc on line 256<br>
Поиск по родному форуму MaxMind навел на такой вот код:

/ uncomment for Shared Memory support<br>
// geoip_load_shared_mem(&quot;/usr/local/share/GeoIP/GeoIPCity.dat&quot;);<br>
// $gi = geoip_open(&quot;/usr/local/share/GeoIP/GeoIPCity.dat&quot;,GEOIP_SHARED_MEMORY);<br>
$gi = geoip_open(DIR_WS_INCLUDES . &#39;GeoIPCity.dat&#39;, GEOIP_STANDARD);<br>

Попробовал этот код в таком вот виде:

<br>
geoip_load_shared_mem(&#39;geoip/GeoLiteCity.dat&#39;);<br>
$gi = geoip_open(&#39;geoip/GeoLiteCity.dat&#39;,GEOIP_SHARED_MEMORY);<br>

Но ошибка остается.

Ошибка пропадает если из запроса убрать

include(&#39;geoip/geoipcity.php;
include(&#39;geoip/geoip.php;

но в итоге могу получить только название страны, region и city возвращают пустые значения.

Понимаю что чтобы разобраться нужно вникать и не удобно отнимать у Вас время, но может сталкивались с подобным.

upd: вопрос снимается, как выяснилось это бок MaxMind, он просто слабовато определяет украинские города и области.

Собственно теперь осталось разобраться как все это дело привязать к базе регионов OpenCart, а города как я понял в базе отсутствуют? их нужно подключать отдельно?

Надіслати
Поділитися на інших сайтах


Конечная цель в чем? По-моему, в этом случае проще взять готовый модуль оформления заказа (Simple checkout by deeman) и пользоваться - там уже GeoIP прикручено при оформлении заказа.

Если хочется "сами с усами" - ну тогда изучайте и ковыряйте.

Надіслати
Поділитися на інших сайтах


Конечная цель в чем?

определение города при оформлении заказа.

По-моему, в этом случае проще взять готовый модуль оформления заказа (Simple checkout by deeman) и пользоваться - там уже GeoIP прикручено при оформлении заказа.

так и хотел, да не смог вовремя с ним связаться. А сейчас уже форма заказа очень изменена под собственные нужды. Еще раз адаптировать слишком долго.

да и вот это верно:) свой велосипед всегда интересно, особенно на стадии обучения!

Если хочется "сами с усами" - ну тогда изучайте и ковыряйте.

Надіслати
Поділитися на інших сайтах


  • 1 year later...
  • 2 years later...

Здорово рекламировать его везде. Я пишу вам вторую неделю с мольбами о помощь и до сих пор жду чего-то.

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.