Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Серверные технологии и Flash (http://www.flasher.ru/forum/forumdisplay.php?f=62)
-   -   Страна по ip - помогите разобраться (http://www.flasher.ru/forum/showthread.php?t=99469)

Eric Gurt 07.08.2007 01:14

Страна по ip - помогите разобраться
 
Ниже приведен код функции, возвращающей страну по ip адресу:
Код:

function country_by_ip ($ip)
{
        $sock = fsockopen ("whois.ripe.net", 43, $errno, $errstr);
        if (!$sock)
        {
                return "??";
        }
        else
        {
                fputs($sock, $ip."\r\n"); // Здесь ошибка?
                while (!feof($sock))
                {
                        $str=fgets ($sock, 128);
                        //echo $str; // И видим, что что-то не так с fputs
                        $country=substr(strstr($str,"country:"), 8);
                        if ($country)
                        {
                                $country=trim($country);
                                $country=substr($country, 0, 2);
                                return strtoupper($country);
                        }
                }
                return "??";
        }
        fclose ($sock);
}

Эта функция возвразает EU (Европу) (!?) вместо UA, RU или PL. Причем год назад все работало.
Кто знает - просьба помочь. Нужно, чтобы возвращались страны (UA, RU, PL).

etc 07.08.2007 09:59

Найти другой сервак, который выдает нужное.

Eric Gurt 07.08.2007 10:33

если в этом коде добавить "echo $str;" перед "if ($country) " то видим, что ip адрес тут не передался:
Код:

fputs($sock, $ip."\r\n");
а разве есть другой?

etc 07.08.2007 10:37

Ну вместо whois.ripe.net использовать что-нибудь иное. Что именно — не знаю.

Kikasso 07.08.2007 11:56

Нарой где-нить базу айпишников, и whois не понадобится.

anant 13.08.2007 18:08

Цитата:

Сообщение от Kikasso
Нарой где-нить базу айпишников, и whois не понадобится.

Это действительно лучше

FFFantik 16.08.2007 01:47

Цитата:

Сообщение от Eric Gurt
Кто знает - просьба помочь. Нужно, чтобы возвращались страны (UA, RU, PL).

Так а в чем сложность? =) Тут буквально пару строк и писать..
Ну, вот я написал функцию....проверил на RU, выдает что надо...примерно так в общем:
Код:

function getCountry($ip) {                     

$adress='http://www.ripe.net/fcgi-bin/whois?form_type=simple&full_query_string=&searchtext='.$ip.'&do_search=Search';
       
        $str = file_get_contents($adress);
        $ar = explode('country:        ',$str);
        $country = $ar[1];
        $country = substr($country,0,2);
        $country = trim($country);
        return $country;
}


etc 16.08.2007 01:59

А откуда такая уверенность, что символов в названии страны только два?

FFFantik 16.08.2007 06:27

Хм =) Ну просто автор упомянул только три страны...и у всех двубуквенное обозначаение...
Цитата:

Сообщение от Eric Gurt
Нужно, чтобы возвращались страны (UA, RU, PL).

и я воспринял это (то, что ему нужна инфа только о трех странах) буквально...видимо зря =)
А сколько вообще максимально в буквенном коде стране может быть букв?
Думаю...больше 4 не будет всяко? Тогда исправить 2 на 4 :
Код:

$country = substr($country,0,4);
и дальше как было..

Skubent 16.08.2007 08:07

Вырезать от "country:" до "#" или до конца строки, обтримать.
Задача на регулярные выражения для начинающих.

Что характерно, автор вопроса скорее всего о нем уже забыл.


Часовой пояс GMT +4, время: 13:46.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.