ქართველი ხარ ბიჭოო? :) ანუ User Country Detector

ძალიან მაგარი ფილმია, როგორც უმეტესი ქართული ფილმები, მაგრამ ამ პოსტს არანაირი კავშირი არ ააქვს ამ ფილმთან გარდა პოსტის სათაურისა 😉  მოკლედ განვიხილოთ რა გვინდა. ხშირად არის შემთხვევა როცა გვსურს ჩვენს საიტზე ქართველი ვიზიტორის დადგენა, ამის თითქმის ერთადერთი საშუალება არის ვიზიტორის ip-ის დადგენა, გარჩევა და შესაბამისი რეაგირება. არსებობს უცხოური რესურსები, რომლებიც გვაძლევენ მსოფლიო ip-ების სიას, დაჯგუფებულს ქვეყნების მიხედვით და შემდგომ შეგვიძლია მისი გარჩევა.
მე მინდა შემოგთავაზოთ შედარებით ლაკონური და უფრო სწრაფი მეთოდი ქართული Ip-ების აღმოსაჩენად. ამისთვის ვიღებთ ქართული Ip-ების ბაზას (29.05.2010-ის მდგომარეობით) , ვიგებთ ვიზიტორის Ip-ს, ვურევთ ერთმანეთში და ვიზიტორის Ip თუ არსად არ დაიკარგა ე.ი. ვიზიტორი ქართული Ip-დან არის.
[cc lang=”php”]
‘62.168.160.0/19′,’62.212.32.0/19′,’77.74.40.0/21’,
‘77.92.224.0/19′,’78.139.128.0/18′,’80.77.48.0/20’,
‘80.83.128.0/20′,’80.92.176.0/20′,’80.241.176.0/20’,
‘80.241.240.0/20′,’81.16.240.0/20′,’81.95.160.0/20’,
‘82.112.160.0/19′,’85.114.224.0/19′,’85.117.32.0/19’,
‘85.118.96.0/19′,’85.238.32.0/19′,’87.253.32.0/19’,
‘88.210.192.0/18′,’89.150.0.0/20′,’89.232.0.0/18’,
‘91.151.128.0/20′,’91.184.96.0/19′,’91.208.144.0/24’,
‘91.209.131.0/24′,’91.212.213.0/24′,’92.51.64.0/18’,
‘92.54.192.0/18′,’92.241.64.0/19′,’93.174.24.0/21’,
‘93.177.128.0/18′,’93.186.208.0/20′,’93.188.8.0/21’,
‘94.43.0.0/16′,’94.100.224.0/20′,’94.137.160.0/19’,
‘94.235.0.0/16′,’94.240.192.0/18′,’95.104.0.0/17’,
‘95.137.128.0/17′,’109.172.128.0/17′,’109.205.40.0/21’,
‘109.234.112.0/21′,’109.238.224.0/20′,’178.134.0.0/16’,
‘178.249.16.0/21′,’188.92.208.0/21′,’188.93.88.0/21’,
‘188.121.192.0/19′,’188.129.128.0/17′,’188.169.0.0/16’,
‘193.104.20.0/24′,’212.58.96.0/19′,’212.72.128.0/19’,
‘213.131.32.0/19′,’213.157.192.0/19′,’213.200.0.0/19’,
‘217.11.160.0/20′,’217.147.224.0/20′,’178.236.48.0/20’.
[/cc]

მოცემულ მაგალითში ip-ების ინტერვალის განმარტება გამოიყურება ესე –
81.95.160.0/20 = 81.95.160.0-81.95.175.255
ანუ მოცემული ინტერვალის საწყისი Ip არის 81.95.160.0 და
საბოლოოს ამ Ip + 2(32-20)

შემდეგ გამოვიყენებთ php-ის ჯადოსნურ ფუნქციას ip2long და მივიღებთ შეზავებულ ფუნქციას –

[cc lang=”php”]
function isGeorgianIp($userIp){

$_IPS = array( ‘62.168.160.0/19′,’62.212.32.0/19’,
‘77.74.40.0/21′,’77.92.224.0/19’,
‘78.139.128.0/18’,
‘80.77.48.0/20′,’80.83.128.0/20′,’80.92.176.0/20′,’80.241.176.0/20′,’80.241.240.0/20’,
‘81.16.240.0/20′,’81.95.160.0/20’,
‘82.112.160.0/19’,
‘85.114.224.0/19′,’85.117.32.0/19′,’85.118.96.0/19′,’85.238.32.0/19’,
‘87.253.32.0/19’,
‘88.210.192.0/18’,
‘89.150.0.0/20′,’89.232.0.0/18’,
‘91.151.128.0/20′,’91.184.96.0/19′,’91.208.144.0/24′,’91.209.131.0/24′,’91.212.213.0/24’,
‘92.51.64.0/18′,’92.54.192.0/18′,’92.241.64.0/19’,
‘93.174.24.0/21′,’93.177.128.0/18′,’93.186.208.0/20′,’93.188.8.0/21’,
‘94.43.0.0/16′,’94.100.224.0/20′,’94.137.160.0/19′,’94.235.0.0/16′,’94.240.192.0/18’,
‘95.104.0.0/17′,’95.137.128.0/17’,
‘109.172.128.0/17′,’109.205.40.0/21′,’109.234.112.0/21′,’109.238.224.0/20’,
‘178.134.0.0/16′,’178.249.16.0/21’,
‘188.92.208.0/21′,’188.93.88.0/21′,’188.121.192.0/19′,’188.129.128.0/17′,’188.169.0.0/16’,
‘193.104.20.0/24’,
‘212.58.96.0/19′,’212.72.128.0/19’,
‘213.131.32.0/19′,’213.157.192.0/19′,’213.200.0.0/19’,
‘217.11.160.0/20′,’217.147.224.0/20′,’178.236.48.0/20’); //ipbase 04.06.2010

$ip2long = array();
$userIp = ip2long($userIp);
foreach($_IPS as $ip){
list($sIp,$int) = split(‘/’,$ip);
$fLongIp = ip2long($sIp);
$eLongIp = $fLongIp+pow(2,(32-$int));
if($userIp>=$fLongIp && $userIp< =$eLongIp) return true;
}
return false;
}

[/cc]

უკვე ფუნქციიდან მიღებული პასუხით შეგვიძლია შევასრულოთ ის რაც გვსურს (გვერდის გადამისამართება, ენის ავტომატური მინიჭება და.ა.შ. )

[cc lang=”php”]
if (isGeorgianIp($_SERVER[‘REMOTE_ADDR’])==true){
header(“Location: http://www.blog.readme.ge”);
die();
} else {
header(“Location: http://www.about.com”);
die();
}
[/cc]

სულ ესაა. მაგრამ აქ არის ერთი ნიუანსიც – Ip-ების ბაზა რათქმაუნდა ცვალებადი, მატებადი და განახლებადია. შეძლებისდაგვარად შემოგთავაზებთ ip-ების განახლებულ ბაზას.
ცოცხალი მაგალითი

წარმატებულ იუზერ ქანთრი დეტექტს გისურვებთ 🙂

განახლება:
Ip-ების განახლბული ბაზის გადმოწერა შეგიძლიათ შემდეგი მისამართიდან – http://software77.net/geo-ip/
მარცხნივ Country IP listing-ში ვირჩევთ სასურველ ქვეყანას (Ge Georgia) და ვიწერთ.

.

9 comments on “ქართველი ხარ ბიჭოო? :) ანუ User Country Detector

  1. კარგი სტატიაა. განახლებული მისამართების სია ხომ არ გაქვთ?

  2. გამარჯობა , მაქვს ესეთი კოდი და მინდა რომ ასევე დავაფიქსირო ქართველი და ქართული ფაილი ჩავურთო

    if(isset($_POST[‘submit’])) {
    require (“georgia/qartuli.php”);
    }

    მაქვს ეს და მინდა ესე, თუ დააჭირა მაგ კნოპკას && ან ქართველია ეგრევე რომ მისცეს require ესე არ გამოვა ? ჩVეულებრივ ჩავსვი ხოდა ერორი ამოაგდო

  3. აქ არის კიდე რაღაცშეცდომა არ ამუშავა შეცდომააო

    $ip2long = array();
    $userIp = ip2long($userIp);
    foreach($_IPS as $ip){
    list($sIp,$int) = split(‘/’,$ip);
    $fLongIp = ip2long($sIp);
    $eLongIp = $fLongIp+pow(2,(32-$int));
    if($userIp>=$fLongIp && $userIp< =$eLongIp) return true;
    }
    return false;
    }

  4. მარტო ესეც რომ ჩავსვი შეცდომა დაწერა

    გთხოვ დამეხმარე რა როცა გეცლება.

Leave a Reply

Your email address will not be published. Required fields are marked *