想知道來參觀您的網站的人來自於那個國家嗎?雖然網路上有提供許多類似的計數器服務了。

不過有時候會想針對這些東西做統計,可以搭配許多有趣的功能。

找了半天,發現了 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>";
}
?>

其它應用方式就看您自己的變化嚕。

arrow
arrow
    全站熱搜

    James Wu 發表在 痞客邦 留言(0) 人氣()