ქართველი ხარ ბიჭოო? :) ანუ 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.about.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
მარტო ესეც რომ ჩავსვი შეცდომა დაწერა
გთხოვ დამეხმარე რა როცა გეცლება.