Геотаргетинг. Новый php класс для работы с базой ipgeobase.ru

Геотаргетинг. Новый php класс

В этом посте еще той весной я публиковал небольшую функцию предназначенную для быстрого определения города посетителя при помощи сервиса ipgeobase.ru
С тех пор уже представленный мной способ и скрипт перестали работать. Поэтому я решил написать другой, уже более универсальный php класс для работы с базой ipgeobase.

Не буду пост разбавлять водой и перейду сразу к основной части того, зачем я начал писать данный пост:
PHP класс Geo (Обновлен 18.04.2015)

UPD: Закинул исходники на bitbucket, чтобы можно было скачать оттуда свежую копию архива.

Пример:
http://faniska.ru/geo/
Выдержка из readme архива:
скрипт представлет собой готовый php класс для работы с базой http://ipgeobase.ru

скрипт не требует установки.
требования очень скудные

  • curl — для подключения к серверу ipgeobase.ru
  • iconv — для изменения кодировки, если Ваш сайт не на windows-1251

Инструкции и комментарии расписаны по всему скрипту. Особенно подробно прокомметирован примерный файл index.php
Также код самого класса geo.php подробно описан при помощи phpDoc

Вот пример использования скрипта:



Если кто-либо не в курсе, что такое геотаргетинг и для чего он нужен рекомендую прочитать пост Геотаргетинг. Вывод информации в зависимости от города (IP) посетителя.

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

P.S. Уверен, что Вам будет интересен этот пост: Импорт базы Ipgeobase в локальную базу данных и дальнейшее использование.


Традиционный постовой:

Если заботитесь о своем здоровье и любите фитнес, тогда предлагаем Вашему вниманию сайт: кунцево фитнес. Этой сайт поможет определиться с выбором фитнес-клуба для жителей города Кунцево. Будьте активными, успешными и здоровыми!


Если Вам интересны темы, про которые я пишу в своем блоге, то Вы можете Подписаться на обновления. Подписываться на новости и обновления можно по емайл или через популярные сервисы yandex и google!

Эта запись была опубликована в рубрике PHP кусочки и отмечена метками , . Добавить в закладки ссылку.

97 в ответ на Геотаргетинг. Новый php класс для работы с базой ipgeobase.ru:

  1. oleg пишет:

    спасибо, очень классный пост

  2. Михаил пишет:

    // если есть расширение Simplexml и функция simplexml_load_string доступна
    if(!function_exists(‘simplexml_load_string’))
    {
    $data = simplexml_load_string($string);

    Думаю стоит заменить if(!function_exists(‘simplexml_load_string’)) на if(function_exists(‘simplexml_load_string’))

  3. павел пишет:

    1. зачем курл, если есть file_get_contents
    2. пишите код в утф-8

    • FaNiska пишет:

      1. А представьте, что сервер ipgeobase завис на время? Зависнет и Ваш сайт, так как скрипт будет каждый раз дожидаться ответа при использовании file_get_contents. При использовании curl можно указать время ожидания ответа.
      2. Весь код написан на UTF-8 (без BOM). Воспользуйтесь нормальным редактором.

  4. Андрей пишет:

    Что-то не могу понять, залил архив на хостинг и тишина
    http://mbm2.pp.ua/geo/
    то-ли я туплю…

  5. Антон пишет:

    у меня приоритетным получается адрес за прокси
    [HTTP_X_FORWARDED_FOR] => 192.168.0.5
    город соответственно не определяется
    приоритетным видимо должен быть
    [REMOTE_ADDR]

    • FaNiska пишет:

      А тест случаем не на локальной машине проводится?
      При использовании REMOTE_ADDR будет определяться реальный IP только для тех, кто не использует прокси.
      Если считаете, что для Вашего случая правильнее использовать этот IP, то в методы класса можно передавать этот для определения города.
      $o[‘ip’] = $_SERVER[‘REMOTE_ADDR’];
      $geo = new Geo($o); // запускаем класс

      и внутри класса будет использован переданный IP

      • Игорь пишет:

        Такая-же ситуация. При заходе с мобильного (в часности по данным ripe KUBANGSM-NET) в REMOTE_ADDR ip сегмента сотовой сети, по которому успешно определяется город, а в HTTP_X_FORWARDED_FOR по порядку, через запятую идут внутренние адреса сети.
        Думаю, правильно определять город начиная с HTTP_X_FORWARDED_FOR, но в случае отсутствия данных нужно по порядку спускаться до REMOTE_ADDR

  6. Medreces пишет:

    Итерация так не работает, это же объект:
    $data = simplexml_load_string($string);
    foreach($data->ip as $key => $pattern)
    {
    $data[$key] = trim($pattern);
    }
    Оставьте только parse_string(), его будет достаточно.

  7. Valera пишет:

    FaNiska, запускаю Ваш скрипт на своем сайте, где раньше работала старая версия скрипта, мне выдается 500 ошибка (внутренняя ошибка сервера).
    Ошибка возникает если активна строка
    $data = $geo->get_value().
    В чем может быть ошибка?

    • FaNiska пишет:

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

      • Valera пишет:

        Скачал последний вариант. Не пойму, в чем проблема.

        • FaNiska пишет:

          А в целом скрипт работает? Без указанной строки? На хостинге есть curl и включены исходящие соединения?

        • Valera пишет:

          Разобрались.
          На сервере небыл установлен curl.
          Теперь все работает, только по ip почему-то то определяет москву, то нет. На сайте ipgeobase этот же ip определяет нормально.

          • FaNiska пишет:

            Определяет Москву как другой город или пишет, что не определен? Пользуетесь ли прокси адресами или какими другими средствами?

            Попробуйте вывести свой ip как показано на примере в посте. Меняется ли он у Вас или постоянный?

  8. Руслан пишет:

    Сайт ipgeobase зависает 2-3 раза в месяц. В результате чего корзинка нашего сайта перестает работать (там нужно знать город), поэтому имейте это ввиду при размещении на сайт.

    • FaNiska пишет:

      Бывает и такое. Лично мы пользуемся ихней базой импортированной в локальную базу данных. Если интересно, то отпишу в следующем посте как это сделать.

      • Valera пишет:

        Да, это интересно. У них ведь база все время обновляется? Если бы раз в месяц хотябы выкачивать ее себе в локальную базу, было бы лучше, т.к. когда их сайт подвисает, у меня также возникают проблемы, и сайт отображается не так, как требуется.
        Еще вот что: прога написана в файле, формата utf-8. Если я вношу любые правки в код и пересохраняю скрипт, то все, что писалось по-русски, в браузере пишется знаками ???.
        А причина, что не определялась Москва- стоит true при запросе, т.е. чтобы кэшировалось. Поставил false — все стало определятся.
        Кэширование вообще полезно — как вытащить определенные значения из куки, вернее, в каких переменных, и почему при true не выводит город?
        Спасибо.

        • FaNiska пишет:

          Для начала очистите куки. Возможно в них у Вас сохранился тот вариант, когда у были проблемы с отсутствием curl (то есть сохранилась пустота). А куки сохраняются на неделю. Скрипт должен работать как с куками так и без них. У меня работает и с ними и без них.

          Данные записываются в куки с ключом geobase. Перед записью они сериализуются (массив с данными превращается в строку). Чтобы достать данные из куки нужно проделать следующее (не забывайте проверять наличие куки)
          $data = unserialize($_COOKIE[‘geobase’]);
          В переменную $data будет записан массив с данными об IP

          Чтобы не было проблем с кодировкой, следует поменять
          header(‘Content-type: text/html; charset=UTF-8’); в скрипте
          Также в Notepad++ можете перекодировать файл в другую кодировку. Для этого откройте вкладку «Кодировки» и нажмите «Переобразовать» рядом с нужной кодировкой.

  9. Данил Панфилов пишет:

    Здравствуйте,
    скачал ваш скрипт, закинул на сайт, запускаю и получаю вот что:
    «Мы не смогли определить Ваш город. Позвоните на в скайп UserSkype или напишите на email
    80.66.89.23
    IP адрес валиден»
    Вероятно, какие-то проблемы с получением инфы с айпигеобэйз, но не пойму, почему. phpinfo показывает что cURL enabled.

    • FaNiska пишет:

      Это ведь всего лишь пример и в нем вбито всего 3 города.
      Это пример того, что можно выводить если пользователь не совпадает в указанными городами, но это совсем не значит что его город не определен.
      Рекомендую вникнуть в описание скрипта и в то, как его использовать.

      • Данил Панфилов пишет:

        Да, сорри, эт я поспешил, не посмотрел внимательно! Файл подкорректировал просто на вывод города, но проблема осталась: любое обращение к классу возвращает «пустоту». Ошибок не выдает.

        • FaNiska пишет:

          Какое обращение? Прямое обращение через браузер к файлу класса не допустимо.
          Нужно инициализировать (проинклюдить и запустить) класс с какого-либо другого php файла.
          index.php как раз для этого и существует, чтобы показать как работать с классом.

  10. gexly пишет:

    Использую ваш класс, для определения городов для группы ip-адресов (2-10 штук) в цикле.

    Заметил, что если в массиве больше 6-ти ip-адресов, то выдаётся ошибка сервера (меньше 6-ти всё ок).

    Вот пример скрипта:
    $a = array (
    ‘2.92.191.101’,
    ‘2.92.191.102’,
    ‘2.92.191.103’,
    ‘2.92.191.104’,
    ‘2.92.191.105’,
    ‘2.92.191.106’,
    ‘2.92.191.107’
    );

    foreach ($a as $ip) {
    //Определяем город
    $o[‘ip’] = $ip; // опции. необзятательно.

    $geo = new Geo($o); // запускаем класс
    $city = $geo->get_value(‘city’, false);
    echo $city.»;
    }

    Есть подозрение, что это какое-то ограничение на http://ipgeobase.ru.
    Или я что-то делаю неправилньо?

    • FaNiska пишет:

      Если верить информации с ipgeobase, то ограничений нет. Возможно что ваш скрипт не успевает принять информацию обо всех переданных IP за заданное интерпретатору php время.

  11. Ростислав пишет:

    Здравствуйте. Вообщем я переделал этот скрипт под себя, но наверно удалил что-то лишнее. Мне нужно просто в разные переменные заносит страну, город и регион. Пожалуйста посмотрите что не так сделал и скажите что нужно исправить.
    get_value();

    // если нужен какой то отдельный параметр, передаем его в функцию в виде первого значения
    $city = $geo->get_value(‘city’,true); // например, вернет название города
    $country = $geo->get_value(‘country’,true); // вернет название страны
    $region = $geo->get_value(‘region’,true); // вернет название региона
    # $data = $geo->get_value(‘district’); // вернет название района
    # lat — географическая ширина и lng — долгота
    # inetnum — диапазон ip адресов, в который входит проверяемый ip адрес
    echo $country.$city.$region.»fff»;
    exit();
    ?>
    На странице у меня показывает только fff

    • FaNiska пишет:

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

    • Константин пишет:

      Согласен с Ростиславом.
      Работает только определение города ИЛИ страны в формате «RU».
      При этом страна определяется только если «city» заменить на «country» в переменной $data. Новых переменных, например: $country, скрипт не видит.
      И самое обидное, что автор не хочет комментировать.

      • FaNiska пишет:

        Прошу подробнее описать проблему. Я по Вашему посту не совсем понимаю, что именно не работает.

        • Константин пишет:

          Доброго времени суток!
          Спасибо, что откликнулись.
          Мне нужно определить сначала страну, а потом город.
          Алгоритм примерно такой:
          Если Беларусь Текст1
          Если Казахстан Текст2
          Если Россия Текст ГОРОД текст
          Текст

          Так вот работать можно только с одной переменной $data из списка в скрипте.
          А если нужно с двумя и больше?
          Пытался сделать так $data1, но проблема видимо не в этом.
          Спасибо.

          • FaNiska пишет:

            Вы, видимо, не совсем разбираетесь в том, что делаете. Скрипт сразу определяет город и страну, поэтому отдельно определять страну, затем город нет необходимости. Все равно у одного посетителя не будет нескольких IP.

          • Константин пишет:

            Слово ОПРЕДЕЛЯЕТ здесь не является ключевым. Не понимаю :(, почему Вы сосредоточились только на нем и ни слова о главном?
            Ключевым является решение задачи в файле index.php, повторюсь
            Если Беларусь -Текст1 //это понятно
            Если Казахстан -Текст2 //это тоже понятно
            Если Россия -Текст ГОРОД Текст //а это как выполнить?
            //в строчке учувствуют (пусть так, вместо определяются) две переменные $country и $city,но в дальнейшей обработки логики с последующим выводом на экран учувствует только одна переменная.
            Иначе – Текст //и это понятно
            Вы просили описать проблему, я расписал и, по-моему, достаточно однозначно и понятно. В ответ ни чего конкретного? Не понимаю 🙁

  12. Александр пишет:

    Часто проблемы с сервисом? сейчас вот не могу получить данные.

    И подскажите пожалуйста каким образом сделать самостоятельную запись в куки.
    т.е. город определяется автоматически и выводится нужный адрес. Но надо чтобы у пользователя была возможность указать другой город и соответственно другой адрес. + записалось в куки, чтобы при след заходе не определялся заново город по ip. а брался уже город пользователя (заданный ранее)

    я вижу это как:
    зашел пользователь и определился его город + запись в куки ( с кешированием на неделю)
    потом пользователь нажимает на другой город и происходит перезапись куки.
    При след заходе пользователю уже отобразится им заданный город.
    Какую строчку прописать, чтобы переписать в куках город, к примеру, с москвы на самару?

    • FaNiska пишет:

      Вот строки из класса, которые записывают данные в куки:
      [code]
      $data = $this->get_geobase_data();
      setcookie(‘geobase’, serialize($data), time()+3600*24*7); //устанавливаем куки на неделю
      [/code]
      Если вы хотите перебить значение города. то напишите скрипт, который будет перезаписывать данные в куках. Чтобы внести название города с перезаписью данных ipgeobase, то ваш скрипт должен иметь такие строки:
      [code]
      $data[‘city’] = ‘Сюда название города’;
      setcookie(‘geobase’, serialize($data), time()+3600*24*7); //устанавливаем куки на неделю
      [/code]

      Затем можно будет доставать название города следуя инструкциям скрипта.
      [code]
      $city = get_value(‘city’, true);
      [/code]

  13. Valera пишет:

    Здравствуйте.
    Сегодня, 29 марта 2012 г. утром, не работает сайт ipgeobase => наши клиенты не видят часть информации на сайте.
    Скажите, как настроить скрипт, чтобы
    1. У клиентов сохранялись куки с их городом и страной.
    2. Наш сайт не подвисал из-за неработающего ipgeobase? Чтобы например, если скрипт «не отвечает», то сайт открывался бы в режиме без использования скрипта. Я определяю страну. Как определить, что ipgeobase не открывается? Тогда бы я просто присвоил переменной определения страны ту, которая мне нужна (RU), и мой сайт работал бы в обычном режиме.
    Спасибо.

    • FaNiska пишет:

      Скрипт итак кеширует все данные в куки (если вы не отключаете использование куки). Если у посетителя записаны данные, то его данные будут актуальны в течении недели даже если сайт ipgeobase не будет доступен. Я ответил на Ваш вопрос или я его не понял?

      • Valera пишет:

        По поводу кэширования:
        У меня вызывается функция так
        $geo = new Geo($o); // запускаем класс
        $city = $geo->get_value(‘city’, false);
        $country=$geo->get_value(‘country’, false)
        Здесь параметр false определяет как раз кэширование?

  14. Valera пишет:

    И еще вопрос, можете ответить на email, как выкачать и потом использовать локально базу ip?
    Спасибо.

    • FaNiska пишет:

      Постараюсь сегодня или завтра написать об этом пост в блоге. Подпишитесь на обновления и сразу узнаете.

  15. Valera пишет:

    Возвращает ли функция ошибку, когда скрипт не работает? Если да, то в каком виде, я бы тогда настроил использование так, чтобы если не отвечает, то …

    • FaNiska пишет:

      Можно проверять по строчке

      $data = $geo->get_value();

      если массив $data пустой значит скрипт не смог получить данные от сервера

      в php скрипте это можно реализовать так:

      [code]
      $data = $geo->get_value();
      if(empty($data))
      {
      // данные не получены
      // действия при отсутствии данных
      }
      [/code]

  16. Николай пишет:

    Зравствуйте, при запуске ошибка 502

    явно ругается на curl_setopt($ch, CURLOPT_URL, $link); и остальные опции CURL
    в функции get_geobase_data()

    CURL на сервере работает 100%

    Подскажите пожалуйста в чем может быть причина?

    • FaNiska пишет:

      Попробуйте вот эту строку:
      $link = ‘ipgeobase.ru:7020/geo?ip=’.$this->ip;
      переделать вот так
      $link = ‘http://ipgeobase.ru:7020/geo?ip=’.$this->ip;

      Мною было замечено, что использование ссылки c http:// и без может приводить к разным последствиям. Мб просто небольшой баг, а может я что-то путаю.

      • Николай пишет:

        Работает!

        Я уже голову сломал, спасибо)

        Хостинг Руцентра у меня

        • FaNiska пишет:

          Ну значит мои наблюдения оказались верны. Я как-то тоже голову сломал над этим. Везде раньше в скриптах к курлу прописывал ссылку c http:// а вот после переезда на новый сервер это перестало работать. Возможно, это от версии php зависит, возможно, от версии самого curl или его настроек. Но тем не менее, хорошо, что работает

  17. Николай пишет:

    Скажите пожалуйста, у ipgeobase не предусмотрен возврат кода региона?

    например для региона «Владимирская область» — код региона 33

    Спасибо

  18. Роман пишет:

    Добрый день. Подскажите пожалуйста. У меня та-же проблема, о которой уже выше упоминал Valera (12 Март 2012). При установке (‘city’, true) название города не выводится, только при False. Куки удалял, при присвоении переменной значения $data = unserialize($_COOKIE[‘geobase’]); не выводит ничего. То есть в куки значение вообще не вносится. Я не очень силен в php понятия не имею из-за чего могла возникнуть ошибка. Можете подсказать, как проверить вносится ли у меня значения в куки вообще. Ну типа небольшой скрипт: сначала ввести в куки определенное значение, а потом вытащить его оттуда

    • FaNiska пишет:

      Думаю Вам нужно обратиться к какому-либо php справочнику. В интернете примеров полно, тут не буду приводить примеры. Хотя внутри класса можно «откопать» код, который решит Вашу проблему.

  19. guchiom пишет:

    Странно нахожусь в Харькове, скрипт возвращает, что город Киев.

    • FaNiska пишет:

      Попробуйте зайти на сайт ipgeobase и проверить, какой там выдается результат

    • mychatik пишет:

      Ничего странного.
      Если у Вас провайдер, действующий на всей территории Украины, то скорее всего он будет зарегистрирован в Киеве.
      К примеру, «Київстар» — Вам и определит по IP Киев. А с «Укртелекома» вообще, после переподключения к интернету, с динамическим IP можно любой город Украины получить…

  20. cigraf пишет:

    Здравствуйте, можете-ли Вы написать модуль геотаргетинга для Joomla? Сколько это будет стоить?
    Благодарю.

  21. Юрий пишет:

    Респект!
    Столько искал, столько накопал, но путем отсеивания оставил Ваш блог.
    Буду разбираться.
    Спасибо за труд!

  22. JIukaviy пишет:

    Parse error: parse error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or ‘}’ in /home/c/******/WWW/geo.php on line 4.
    Что не так?

  23. JIukaviy пишет:

    А под PHP4 переправить можно?

  24. Alexey пишет:

    Где можно посмотреть варианты возможных значений, получаемых через
    $data = $geo->get_value('country');
    Для России переменная $date примет значение «RU», а для, например, Украины?

    • FaNiska пишет:

      Можно посмотреть, если скачать базу стран и городов с сайта ipgeobase.ru
      А так это GTLD коды, если не изменяет память, они по ISO.
      Для Ураины GTLD код — это UA

  25. Andrey пишет:

    никак не получается запустить модуль геотаргетинга у себя на сайте.
    готов заплатить за помощь

    • FaNiska пишет:

      Лучше оставьте свои контакты в комментариях. Возможно, те кто справились с этим захотят Вам помочь.

  26. Spirt пишет:

    Спасибо за пост, отлично работает ) с кешированием тока немного перемудрил, на мой взгляд, я очень серьезно сварился когда тестил через прокси )) Мне кажется, лучше по умолчанию поставить false (если не передается параметр)

  27. Радомир пишет:

    Добрый день. Не получается вытянуть данные. Многое уже перепробовал…
    Залил xml на хостинг и обращаюсь к нему, все работает — http://geo.smartorange.com.ua/mygeo.php
    Если $link прописать к ipgeobase.ru, не работает. Пробовал с http:// тоже самое — http://geo.smartorange.com.ua. Подскажите, в чем может быть дело?

  28. Andrey пишет:

    Здравствуйте, скрипт установил, все работает.
    в логи PHP пишет

    [10-Dec-2012 17:28:24] PHP Notice: Use of undefined constant city — assumed ‘city’ in /home/…check_ip.php

    вот код файла check_ip.php

    get_value(false, false);
    $ip_country=$data[country];
    $ip_okrug=$data[district];
    $ip_region=$data[region];
    $ip_city=$data[city];
    ?>

  29. Михаил пишет:

    хотел поставить ваш скрипт с базой на сайт
    но почемуто светит следуищие данные:
    Ваш город Орджоникидзе.

    Все данные:
    Array
    (
    [inetnum] =>
    [country] => UA
    [city] => Орджоникидзе
    [region] => Днепропетровская область
    [district] => Восточная Украина
    [lat] =>
    [lng] =>)
    Достаем город
    Орджоникидзе
    Достаем IP
    IP адрес валиден
    вопрос в том что я в киеве)))
    что посоветуете

    • FaNiska пишет:

      Попробуйте посетить сайт http://ipgeobase.ru/ Если и там показывает неправильный город — то ошибки в скрипте нет. Скрипт лишь «посредник» между базой и пользователем.

  30. Андрей пишет:

    Блин , а у меня чет не работает , ничего не возвращает(((9

  31. Андрей пишет:

    Пытался получить регион

    private function getRegion()
    {
    include(INCLUDES.’geo.php’);
    $o = array();
    $o[‘charset’] = ‘utf-8’;
    $geo = new Geo($o);
    $data = $geo->get_value(‘region’,false);
    echo $data;
    return $data;
    }
    $reg = $this->getRegion();

    В итоге ошибок нет но и переменная пустая ((

    Может не работает из за того что сайт закрыт ?

    • FaNiska пишет:

      Для начала попробуйте получить данные без изменения скрипта, а потом приступайте к изменению.

      Я не могу расматривать все Ваши варианты с кодом. Включите показ ошибок скрипта и поставьте уровень E_ALL чтобы ничего не пропустить. Возможно и найдете свою ошибку.

  32. Art пишет:

    Здравствуйте. У меня скрипт тоже некорректно работает. При первом посещении показывает информацию по IP (Данные из Cookie естественно пустые), но при последующих информацию по IP не отображает (ни в Данные из Cookie, ни в верхнем блоке).

    http://alc.biz/geo/

    Сложилось ощущение, что в куки скрипт записывает пустую информацию, т.к. если их очистить данные начинают показываться в верхнем блоке.

    Подскажете пожалуйста в чем может быть дело и как это исправить?

  33. Art пишет:

    Скрипт на Вашем сайте работает отлично.

    PHP класс Geo (файл geo.zip ~4,5Кб; Обновлен 15.02.2013) скачал заново, результат тот же http://alc.biz/ .

    • FaNiska пишет:

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

  34. Art пишет:

    Проверил, скрипт заработал на 1 из 3-х разных хостингах. Осталось понять почему так 🙂

  35. Бахыт пишет:

    Спасибо огромное! Все отлично работает. Помогло!!!

  36. Oleg пишет:

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

    как можно сделать чтоб пользователь сам мог изменить город. спасибо.

    можно по почте ))))

    • FaNiska пишет:

      Тема этой статьи не затрагивает выбор пользователя.
      Чтобы пользователь сам выбирал город, нужна база данных городов выпадающим списком и последующее сохранение этого выбора в Cookie или в сессию.
      Тот кто разбирается в php сделает без проблем.

  37. Дмитрий пишет:

    Добрый день.

    Скрипт внезапно перестал работать, вчера полез разбираться в чем дело, и смотрю http://ipgeobase.ru/ не работал — был непроплачен домен. Сегодня ipgeobase уже работает, но скрипт до сих пор не работает. В куке пустота( a:0:{}.
    Пытался очистить куки — все тоже самое… В скрипте заменил строку:
    if($cookie && isset($_COOKIE[‘geobase’]))
    на
    if($cookie && strlen($_COOKIE[‘geobase’])>10)
    Все тоже самое =(
    Курл на сервере включен, скрипт раньше работал, я помню месяца два назад обновлял скрипт и вроде все работало, не уж то тогда не догадался очистить куки и все эти два месяца неробило((( И главное незнаю куда копать, никаких ошибок, ничего… пытался и в урл http дописать, толку 0.
    У Вас все работает?

    • FaNiska пишет:

      Думаю, чтобы делать выводы нужно дождаться полного обновления ДНС записей, после просрочки домена ipgeobase.ru

      Если через 24-48 часов скрипт продолжит не работать — буду принимать меры и постараюсь исправить ошибку.

  38. ПаЛыЧ пишет:

    Вопрос на засыпку, при запуске на сервера скрипта возвращается почету локальный IP, а именно 127.0.0.3. В чем может быть косяк?

    • ПаЛыЧ пишет:

      Пардон, раскурил. Переборка результатов IP обрывалось на первом верном параметре. Добавил проверку. Спасибо за решение

  39. Oleg пишет:

    Добрый день!

    Скрипт не хочет работать уже 3 день.
    ругается на эту строку
    return $data[$key]; // если указан ключ, возвращаем строку с нужными данными

    подскажите где капать

  40. Константин пишет:

    Спасибо за отличный скрипт!

  41. Константин пишет:

    Скрипт работает отлично. Спасибо.
    Но есть одно ‘но’ конструктор, который первоначально выполняется, обнуляет все настройки в моей теме, возможно и во многих других, предлагаю уникализировать все переменные добавив в начало каждой geo_ — это сделает скрипт более устойчивым, более уникальным и не ведущим к FATAL ERROR, как в моем случае.

    • FaNiska пишет:

      В какой теме? Вы о чем? Конструктор какого-либо класса не может обнулять другие переменные и настройки вне зоны видимости.

  42. Роман пишет:

    Некорректно ведет себя скрипт, если мы не хотим пользоваться куками (по любой из причин), то при вызове get_value(‘city’, false), результат все равно будет сохранен в куку, а это может вызывать различные проблемы.
    Правильнее было бы при отказе от куки и не пытаться сохранять туда полученные данные, для этого строку 61 нужно изменить с:
    if (!empty($data)) {
    на:
    if ($cookie && !empty($data)) {

    На битбакет не зарегистрирован, поэтом оформить пулл-реквест не могу, звиняйте 🙂

  43. rosta.coder пишет:

    Скрипт уже не работает.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *