php სკრიპტში IP მისამართით ქვეყნის კოდის დადგენა
აღწერა:
php სკრიპტში ვიზიტორის ქვეყნის დადგენა ვიზიტორის IP მისამართის საშუალებით არის მარტივი პროცედურა. წინასწარ ბაზაში ინახება ცხრილი, რომელშიც ჩამოთვლილია რომელ IP მისამართს რომელი ქვეყნის კოდი შეესაბამება. აქ შესაძლებელია სწორედ ამ ცხრილის გადმოწერა.
Features
მაგალითად ცხრილში "c2c" სვეტში რომელ IP-საც "ge" აქვს მითითებული, არის საქართველოს მისამართები.
ასევე IP მისამართების დიაპაზონისთვის, მაგალითიად ჩანაწერი ცხრილში:
(100663296, 121195295, 1217739600, 'us'),
ნიშნავს რომ 100663296-დან 121195295-მდე IP მისამართების დიაპზონი არის us.
ანუ პირველ სვეტში მითითებული IP მისამართების დიაპაზონის დასაწყისი, მეორე სვეტში დასასრული.
მესამე სვეტი არის ბოლო განახლების თარიღი და ძირითადად არ გამოიყენება.
მეოთხე სვეტში გვაქვს თავად ქვეყნის კოდი, რომლიდანაც არის ვიზიორი (მისი IP მისამართი) .
თვალი მიჩვეულია ip მისამართების ჩაწერას ასეთი ფორმით 127.0.0.1
ცხრილი კი შეიცავს რიცხვებს. ეს იმიტომ ხდება რომ რიცხვებთან მუშაობა უფრო სწრაფად ხდება და სკრიპტი უფრო სწრაფია.
აქ მოყვანილია ფუნქცია unsigned_ip2long ip მისამართის რიცხვში გადასაყვანად.
და მაგალითისთვის მუშა ფუნქცია get_user_country ქვეყნის კოდის დასადგენად ip მისამართის საშუალებით.
function unsigned_ip2long($ip) {return sprintf("%u", ip2long($ip));}
function get_user_country() {
global $db, $prefix;
$user_ip_address = $_SERVER['REMOTE_ADDR'];
$user_ip_number = unsigned_ip2long($user_ip_address);
$record_array = $db->sql_query('SELECT c2c FROM '.$prefix.'_nsnst_ip2country WHERE ip_lo <= '.$user_ip_number.' AND ip_hi >= '.$user_ip_number);
if($db->sql_numrows($record_array)!=0){
$row = $db->sql_fetchrow($record_array, SQL_ASSOC);
return array('found'=> 1, 'c2c'=> $row['c2c'], 'ip'=> $user_ip_address, 'ipn'=> $user_ip_number);
}else{
return array('found'=> 0, 'c2c'=> '', 'ip'=> $user_ip_address, 'ipn'=> $user_ip_number);
}
}
გამოყენება:
$ip2c=get_user_country();
if($ip2c['found'] && $ip2c['c2c'] == 'ge' ){
// ე.ი ip მისამართი ეკუთვნის საქართველოს
}else{
// ე.ი ip მისამართი არ ეკუთვნის საქართველოს
}
|