Sử dụng ip-to-country để kiểm tra người truy cập đang ở quốc gia nào 2010-02-04 04:26:15


Cái này không có gì mới mẽ với đa số anh em, TG chỉ hướng dẫn thêm tí và viết 1 số code sẵn , anh em nào có nhu cầu thì tham khảo. Ip-to-country cung cấp 1 database (định dạng CSV) chứa thông tin của IP, Quốc gia để xác định quốc gia của người sử dụng thông qua IP của họ.
Ví dụ khi TG truy cập từ IP 118.69.68.222 thì có thể so sánh vào db để tìm ra là TG đang ở VN.
Chú ý là số lượng IP ngày càng nhiều nên khi bạn cần thì vào trang chính của ip-to-country để dl bản mới nhất

Trước hết tạo 1 table đơn giản để lưu trữ phần dữ liệu:
CREATE TABLE `tbl_ip_country` (
`from_ip` double NOT NULL,
`to_ip` double NOT NULL,
`code2` varchar(2) collate utf8_unicode_ci default NULL,
`code3` varchar(3) collate utf8_unicode_ci default NULL,
`name` varchar(255) collate utf8_unicode_ci default NULL,
PRIMARY KEY (`from_ip`,`to_ip`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;


Sau khi download và giải nén bạn sẽ được file ip-to-country.csv
Bạn có thể dùng đoạn code sau để import dữ liệu từ file csv vào mysql
<?php
mysql_connect
('localhost','your_user','your_psw');
mysql_select_db('your_db_name');

if ((
$handle = fopen("ip-to-country.csv", "r")) !== FALSE) {

while ((
$data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$sql = "INSERT INTO tbl_ip_country() VALUES(";
$sql .= "'".$data[0]."',"; // from ip
$sql .= "'".$data[1]."',"; // to ip
$sql .= "'".$data[2]."',"; // code2
$sql .= "'".$data[3]."',"; // code3
$sql .= "'".addslashes($data[4])."'"; // name
$sql .= ")";
mysql_query($sql) or die(mysql_error());

}
fclose($handle);
}

?>

Chú ý: File tương đối lớn nên có thể bạn phải cắt nhỏ hoặc tăng thời gian thực thi của code lên để import đựoc hết vào db.

Tiếp theo là bạn viết hàm chuyển từ IPv4 thành 1 số :
<?php
function ip_number($ipv4){
$ips = explode('.',$ipv4);
return
$ips[0] * 16777216 + $ips[1] * 65536 + $ips[2] * 256 + $ips[3];
}
?>

Và cuối cùng khi vào trang web bạn thực thi đoạn code sau:
<?php
$ip
= inet_aton($_SERVER['REMOTE_ADDR']);
$country_query = "SELECT * FROM tbl_ip_country WHERE from_ip <= $ip AND to_ip >= $ip ";
$country_exec = mysql_query($country_query);
$ccode_array=mysql_fetch_array($country_exec);
if(
$ccode_array){
echo
'Ban dang o quoc gia:'.$ccode_array['name'];
}else{
echo
'Ko xac dinh duoc IP nay';
}
?>

Kết quả sẽ hiển thị ra quốc gia bạn đang truy cập

Tra loi 3 comment(s) TG 2010-02-04 04:26:15

cóc 2010-02-04 05:15:00

Thanks ku                  

Tra loi

Chim 2010-02-05 08:18:39


Bác TG ơi cái
<?php
function ip_number($ipv4){
$ips = explode('.',$ipv4);
return
$ips[0] * 16777216 + $ips[1] * 65536 + $ips[2] * 256 + $ips[3];
}
?>
để làm chi rứa, chỉ viết ra đấy mà không thấy sử dụng, lạ vậy ta?

Tra loi

cóc 2010-02-05 08:28:16

chổ inet_aton chính là ip_number.

Ku TG là con Robot "Copy èn Past" mà :D

Tra loi

Y kien