IP 2 Flag помочь дописать скрипт

Jake Foley

Мой дом здесь!
Регистрация
14 Дек 2006
Сообщения
747
Реакции
395
Здравствуйте,

Просьба помочь в реализации скрипта который должен показывать флаг страны в зависимости от IP пользователя.

Перепробовал готовые решения, но ни одно из них не определяло все страны (часто был пустой флаг)

И вот я нашел кое что:

PHP:
<?php
$ip2="91.197.17.233";
function whois($ip2){
error_reporting(0);
$url = 'whois.arin.net';
function whois0($url,$ip2)
{
  $sock = fsockopen($url, 43, $errno, $errstr);
  if (!$sock) exit("$errno($errstr)");
  else
  {
    fputs ($sock, $ip2."\r\n");
    $text = "";
    while (!feof($sock))
    {
      $text .= fgets ($sock, 128)."<br>";
    }
    fclose ($sock);
    $pattern = "|ReferralServer: whois://([^\n<:]+)|i";
    preg_match($pattern, $text, $out);
    if(!empty($out[1])) $rez = whois0($out[1], $ip2);
    else $rez = $text;
    $rez = eregi_replace( '(.*)<br>inetnum', 'inetnum',$rez);
    $rez = eregi_replace( '<br>% Information related(.*)', '<br>',$rez);
    return $rez;
  }
}
 
$str0 = whois0($url,$ip2);
$str1 = eregi_replace( '(.*)country:', '',$str0);
$str1 = eregi_replace( '<br>(.*)', '',$str1);
$res5 = eregi_replace( ' ', '',$str1);
$res5 = strtolower($res5);
if(!($res5 ==''))
$res = '<img src="flags/' .$res5 .'.gif">';
return $res;
}
 
if(!empty($_POST['ip2'])) echo whois($_POST['ip2']);
 
?>

Определяет страну и берет флаг с папки flags.

Мне нужно показывать результат выполнения скрипта в виде
<img src="Для просмотра ссылки Войди или Зарегистрируйся" />

Просьба помочь с реализацией.
 
А если использовать готовые скрипты, наподобие такого Для просмотра ссылки Войди или Зарегистрируйся ?
И его уже доделать как требуется, тут и база у тебя хранится будет, ненадо куда-то извне коннектиться. Хотя наверно я какие-то нюансы незнаю.
 
Берем sypexgeo

Базы + скрипт поиска информации по ip. Преимущества - все делается на вашем сервере и не отнимает много ресурсов. На хабре человек писал о создании этой штуки. Там используется, как я понимаю, бинарный поиск.

Далее подключаем php библиотеку с того же проекта, которая позволяет работать с базами

PHP:
$SxGeo = new SxGeo("SxGeoCity.dat", SXGEO_BATCH | SXGEO_MEMORY);

Затем

PHP:
$country = $SxGeo->getCountry($ip);  (возвращает двухзначный ISO-код страны)
В итоге получаем двухзначный стандартизированный код страны и выводим картинку нужного флага

PHP:
echo "<img src='images/flags/{$country}.jpg' />";

Получаем независимость от сторонних сервисов и довольно легкий скрипт. Сравнения скорости работы определения страны по ip можно найти на том же хабре, где сравнивались sypexgeo и другие похожие.

Не сочтите за рекламу, не имею отношения к ним, гуглиться в два счета и так. Просто недавно использовал на рабочем проекте и очень понравилась скорость работы.
 
Назад
Сверху