如果用户的IP在某个IP范围之间,我正在使用重定向。但是,我正在使用多个ip范围,所以我想知道最好的方法。我目前正在使用它来重定向,
但是,如果IP范围是从72.122.166.0-72.122.159.266和68.61.156.0-68.61.181.255和78.121.74.0-78.121.77.255说出那么我该怎么做?谢谢!
答案 0 :(得分:19)
检查IP范围的最佳方法是将虚线地址转换为32位数字并对其进行比较。 ip2long
功能可以为您进行转换。例如:
$range_start = ip2long("68.61.156.0");
$range_end = ip2long("68.61.181.255");
$ip = ip2long($_SERVER['REMOTE_ADDR']);
if ($ip >= $range_start && $ip <= $range_end) {
// blocked
}
您可以将多个这些范围放入一个数组中并迭代它以检查多个范围。
答案 1 :(得分:0)
<?php
/* VARIABLES */
// -------------------------------
$ip = ip2long($_SERVER['REMOTE_ADDR']);
$current_ip_range = array(); // Class "X" range.
$range = (object) array();
//$range->name = '24-Bit Block';
$range->lower = ip2long('0.0.0.0'); //This is the initial value.
$range->upper = ip2long('83.50.207.254'); //This is the final value.
$current_ip_range[] = $range;
// -------------------------------
if ($ip >= $range->lower && $ip <= $range->upper)
{
/* ----------------------------------------
* We ask to the server if the IP grabbed
* is <= or => to the ip ranges and if if does
* so, shows success message.
* -------------------------------------- */
echo "La IP $ip está dentro del rango";
}
else
{
/* ----------------------------------------
* If it isn't, shows a failure message.
* -------------------------------------- */
echo "La ip $ip no está dentro del rango";
}
答案 2 :(得分:-1)
如果您愿意使用SQL,并拥有IP范围表,
SELECT * FROM `ips` WHERE $ip BETWEEN `start` AND `end`
如果结果为零,那么它就不会被阻止。
编辑:当然使用ip2long
功能。
如果您有很多随机范围,这是一种更好的方法;纯粹的PHP方式对于更少的方式更好。