想知道來參觀您的網站的人來自於那個國家嗎?雖然網路上有提供許多類似的計數器服務了。
不過有時候會想針對這些東西做統計,可以搭配許多有趣的功能。
找了半天,發現了 The IP to Country Database 這個地方,它的資料庫一直有在持續更新,
最近一次更新是 2010 年 01 月 12 日。
下載完它的資料解完壓縮後應該可以得到 ip-to-country.csv 這個檔案。
在 MySQL 中,建立一個資料表。
CREATE TABLE `iptocountry` (
`ip_from` int(10) unsigned NOT NULL default '0',
`ip_to` int(10) unsigned NOT NULL default '0',
`country_code2` char(2) NOT NULL default '',
`country_code3` char(3) NOT NULL default '',
`country_name` varchar(50) NOT NULL default ''
) TYPE=MyISAM
接著將 CSV 資料匯入 MySQL 中,(test.iptocountry = 您的資料庫及資料表名稱請自行修改)
LOAD DATA INFILE "D:\\ip-to-country.csv" INTO TABLE test.iptocountry FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n';
Query OK, 102964 rows affected (0.13 sec)
Records: 102964 Deleted: 0 Skipped: 0 Warnings: 0
表示匯入成功。
把資料匯到資料庫之後怎麼使用哩?
底下是簡短的範例
<?php
function getIP($type) {
if (getenv("HTTP_CLIENT_IP")
&& strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown"))
$ip = getenv("HTTP_CLIENT_IP");
else if (getenv("REMOTE_ADDR")
&& strcasecmp(getenv("REMOTE_ADDR"), "unknown"))
$ip = getenv("REMOTE_ADDR");
else if (getenv("HTTP_X_FORWARDED_FOR")
&& strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown"))
$ip = getenv("HTTP_X_FORWARDED_FOR");
else if (isset($_SERVER['REMOTE_ADDR'])
&& $_SERVER['REMOTE_ADDR']
&& strcasecmp($_SERVER['REMOTE_ADDR'], "unknown"))
$ip = $_SERVER['REMOTE_ADDR'];
else {
$ip = "unknown";
return $ip;
}
if ($type==1) {return md5($ip);}
if ($type==0) {return $ip;}
}
$IP = getIP(0);
$stmt = $dbh->prepare( "SELECT COUNTRY_NAME FROM iptocountry WHERE inet_aton('$IP') >= ip_from AND inet_aton('$IP') <= ip_to;" );
$stmt->execute();
$count = $stmt->rowCount();
if ($count == "0"){
echo "Welcome!You're come form<br></br>";
echo "<center>our intranet.</center>";
}else{
$result = $stmt->setFetchMode(PDO::FETCH_NUM);
while ($row = $stmt->fetch()){
$country=$row[0];
}
echo "Welcome!You're come form<br></br>";
echo "<center>$country.</center>";
}
?>
其它應用方式就看您自己的變化嚕。
- Jan 22 Fri 2010 15:14
[PHP] 來源 IP 及國家代碼一覽表 The IP to Country Database
全站熱搜
留言列表