2011-05-05 127 views
4

基本上,我的目标是允许我的用户指定一个ip范围来访问测试。因此,可以说,这些值存储在我的数据库:通过IP范围限制访问(PHP)

来自:148.197.34.112

为:148.197.34.255

是否有这些我可以使用这些IP地址转换成数字对于任何功能比较呢?

所以显然,如果用户试图加载一个页面......如果他的IP不在IP范围内,请重新指引它们。

感谢提前:)

+0

如果有人可以提供代码来生成IPv6地址范围,我将不胜感激。 – 2011-05-05 14:12:04

+0

是否有特定的理由在PHP中做到这一点?因为您可以在您的网络服务器配置中轻松完成此操作... – wimvds 2011-05-05 14:32:08

+0

我无法访问webserver config - 它是一个uni项目。多谢你们。 – buymypies 2011-05-05 14:46:43

回答

6

ip2long()功能将一个IPv4地址做的工作。

要将IPv6地址转换为128位整数,请使用inet_pton()函数。

+0

merci:出于兴趣是否存在处理IPv6地址的这种事情? – buymypies 2011-05-05 14:16:40

+0

感谢您的问题!我编辑了我的答案。 – 2011-05-05 14:55:35

1

如果数据库中的值完全以这种格式存储,那么您可以在php中使用INET_ATON函数(对于mysql,至少)和ip2long()。

$iplong=ip2long($ip); 
$q=mysql_query("SELECT * FROM ips WHERE INET_ATON(ip_from)<='".$iplong."' AND INET_ATON(ip_to)>='".$iplong."' LIMIT 0,1"); 

但是,当然,这将是更好的长期存储值,而不是纯IP的DB。