2011-05-05 131 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。