我在MYSQL中有下表
CREATE TABLE IF NOT EXISTS `countryip` (
`ip_from` bigint(10) unsigned NOT NULL DEFAULT '0',
`ip_to` bigint(10) unsigned NOT NULL DEFAULT '0',
`country_iso2` varchar(2) COLLATE utf8_bin NOT NULL DEFAULT '',
`country_iso3` varchar(3) COLLATE utf8_bin NOT NULL DEFAULT '',
`country_name` varchar(32) COLLATE utf8_bin NOT NULL,
KEY `ip_from` (`ip_from`,`ip_to`))
ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin;在这里,我增加了世界上所有国家的全部知识产权范围。
我想在php中创建一个脚本,将用户ip与此数据库中的ip范围进行比较,并在此之后回显一条消息。从我未完成的事情开始,我需要声明
<?php
mysql_select_db("database_name") or die(mysql_error());
$ip = $_SERVER['REMOTE_ADDR'];
$query = mysql_query("SELECT `IP` FROM `ban_ip` WHERE `IP` = '$ip'"); // this works only if i have the single static ip in the dbs, but now i have the ip range
if (mysql_num_rows($query) > 0)
{
echo ' <!DOCTYPE html> <html> <head> <script type="text/javascript"> alert("You are not allowed to access this website"); window.location.replace("index.php"); </script> </head> <body> </body> </html>';
}我能做些什么来代替这个查询?
$query = mysql_query("SELECT `column` FROM `table` WHERE `column` = '$ip'");以使用户IP与ip范围的比较成为可能。
IP从列到IP列的样子是这16777216,16777471,为了找出ip,有一个类似于ip = 256 +类B* 256 +类C* 256 * 256 +类D* 256 * 256 * 256 *256的公式。
发布于 2013-09-19 13:34:34
可以对指定的表使用以下SQL查询:
SELECT `country_iso2` FROM `countryip` WHERE `ip_from` <= inet_aton('$ip') AND ip_to >= inet_aton('$ip')这将为您指定的IP地址选择两个字符国家ISO代码。从这里开始,简单地将ISO代码与禁用国家代码表中的条目进行比较。
发布于 2013-09-19 13:29:07
我知道这不是你问题的直接答案,但我最近使用了这个API;
json.php
使用JSON非常容易,也可以从服务器快速回复。它是免费的,尝试一下,可以为你的数据库节省一些存储空间。
发布于 2013-09-19 14:08:40
这不是问题的直接答案,但在我的经验中,自己维护IP数据库有点麻烦。
为此,我使用了MaxMind的免费GeoLite2数据库,因为它经常更新并提供相当精确的结果:
https://stackoverflow.com/questions/18895796
复制相似问题