ქართველი ხარ ბიჭოო? :) ანუ User Country Detector
ძალიან მაგარი ფილმია, როგორც უმეტესი ქართული ფილმები, მაგრამ ამ პოსტს არანაირი კავშირი არ ააქვს ამ ფილმთან გარდა პოსტის სათაურისა 😉 მოკლედ განვიხილოთ რა გვინდა. ხშირად არის შემთხვევა როცა გვსურს ჩვენს საიტზე ქართველი ვიზიტორის დადგენა, ამის თითქმის ერთადერთი საშუალება არის ვიზიტორის ip-ის დადგენა, გარჩევა და შესაბამისი რეაგირება. არსებობს უცხოური რესურსები, რომლებიც გვაძლევენ მსოფლიო ip-ების სიას, დაჯგუფებულს ქვეყნების მიხედვით და შემდგომ შეგვიძლია მისი გარჩევა.
მე მინდა შემოგთავაზოთ შედარებით ლაკონური და უფრო სწრაფი მეთოდი ქართული Ip-ების აღმოსაჩენად. ამისთვის ვიღებთ ქართული Ip-ების ბაზას (29.05.2010-ის მდგომარეობით) , ვიგებთ ვიზიტორის Ip-ს, ვურევთ ერთმანეთში და ვიზიტორის Ip თუ არსად არ დაიკარგა ე.ი. ვიზიტორი ქართული Ip-დან არის.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | '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'. |
მოცემულ მაგალითში 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 და მივიღებთ შეზავებულ ფუნქციას –
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | 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; } |
უკვე ფუნქციიდან მიღებული პასუხით შეგვიძლია შევასრულოთ ის რაც გვსურს (გვერდის გადამისამართება, ენის ავტომატური მინიჭება და.ა.შ. )
1 2 3 4 5 6 7 | if (isGeorgianIp($_SERVER['REMOTE_ADDR'])==true){ header("Location: http://www.blog.readme.ge"); die(); } else { header("Location: http://www.about.com"); die(); } |
სულ ესაა. მაგრამ აქ არის ერთი ნიუანსიც – Ip-ების ბაზა რათქმაუნდა ცვალებადი, მატებადი და განახლებადია. შეძლებისდაგვარად შემოგთავაზებთ ip-ების განახლებულ ბაზას.
ცოცხალი მაგალითი
წარმატებულ იუზერ ქანთრი დეტექტს გისურვებთ 🙂
განახლება:
Ip-ების განახლბული ბაზის გადმოწერა შეგიძლიათ შემდეგი მისამართიდან – http://software77.net/geo-ip/
მარცხნივ Country IP listing-ში ვირჩევთ სასურველ ქვეყანას (Ge Georgia) და ვიწერთ.
.
October 25th, 2010 at 9:49 pm
კარგი სტატიაა. განახლებული მისამართების სია ხომ არ გაქვთ?
October 25th, 2010 at 10:31 pm
რადგან დაინტერესდი ახალი მისამართებით, მაქსიმუმ ხვალ დავდებ განახლებულ ბაზას.
November 25th, 2010 at 11:27 am
მემგონი ეს უფრო მოხერხებულია იმ უპირატესობით რომ ბაზა არ გჭირდება:
<?php
$country = file_get_contents('http://ip2.cc/?api=cc&ip=127.0.0.1');
echo $country; //GE
November 25th, 2010 at 11:35 am
@ოთო
პრინციპში გეთანხმები, იმიტომ რომ მალე ქართული ვარიანტიც ჩაირთვება ეგეთი
October 10th, 2011 at 12:13 am
გამარჯობა , მაქვს ესეთი კოდი და მინდა რომ ასევე დავაფიქსირო ქართველი და ქართული ფაილი ჩავურთო
if(isset($_POST[‘submit’])) {
require (“georgia/qartuli.php”);
}
მაქვს ეს და მინდა ესე, თუ დააჭირა მაგ კნოპკას && ან ქართველია ეგრევე რომ მისცეს require ესე არ გამოვა ? ჩVეულებრივ ჩავსვი ხოდა ერორი ამოაგდო
October 10th, 2011 at 12:16 am
@ლევანი
გამოვა, უბრალოდ რაღაც სხვა შეცდომა გაქვს.
October 10th, 2011 at 2:20 pm
დამეხმარებით შედგენაში ?
October 10th, 2011 at 2:26 pm
აქ არის კიდე რაღაცშეცდომა არ ამუშავა შეცდომააო
$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;
}
October 10th, 2011 at 2:28 pm
მარტო ესეც რომ ჩავსვი შეცდომა დაწერა
გთხოვ დამეხმარე რა როცა გეცლება.