xan*_*xan 2 php sql ip geolocation
我正在编写一个程序,我希望自动识别用户的国家/地区.我编写了代码来获取ip并将其存储在DB中.
$ip = gethostbyname($_SERVER['REMOTE_ADDR']);
Run Code Online (Sandbox Code Playgroud)
储存:
<?php `$result = mysql_query("INSERT INTO `wh_order` (`name`, `email`, `contact`, `itemid`, `itemquantity`, `ip`,`message`, `date`) VALUES('".$name."','".$email."','".$contact."','".$itemid."','".$itemquantity."','".$ip."','".$message."', NOW())");` ?>
Run Code Online (Sandbox Code Playgroud)
另外,这是存储IP地址的最佳方法吗?
首先,gethostbyname不会给你一个国家.你不得不求助于地理定位.一个有效的免费服务是http://freegeoip.net.他们提供API:
http://freegeoip.net/json/74.125.143.104
哪个回报:
{
"city": "Mountain View",
"region_code": "CA",
"region_name": "California",
"metrocode": "807",
"zipcode": "94043",
"longitude": "-122.057",
"latitude": "37.4192",
"country_code": "US",
"ip": "74.125.227.136",
"country_name": "United States"
}
Run Code Online (Sandbox Code Playgroud)
请注意,IP地理定位不会100%准确.
存储IP地址的最佳列类型INT(10) unsigned占用的空间比varchar列少.使用INET_ATON和INET_NTOA可以轻松处理转换:
mysql> SELECT INET_ATON('10.0.5.9');
-> 167773449
mysql> SELECT INET_NTOA(167773449);
-> '10.0.5.9'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4961 次 |
| 最近记录: |