我在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;
在这里,我添加了世界上所有国家的整个 IP 范围。
我想在 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 FROM 列,TO IP 列看起来像这样 16777216, 16777471,为了找出 ip,有一个类似于 ip = 256 + CLASS B * 256 + CLASS C * 256 * 256 + CLASS D * 256 * 的公式256 * 256