检查几乎相同的IP

时间:2014-11-19 04:50:18

标签: php mysql

我目前遇到的问题是,用户使用不同的ip提交多个表单。 (递增1。)我的意思是用户使用123.123.123.123, then 123.123.123.124,然后123.123.123.125等提交表单等等。
我已经制作了一个MySQL表,用于在提交期间存储IP和时间戳(UNIX)。我如何才能这样做,以便如果表中有123.123.123.123等IP,则具有IP 123.123.123.124的用户无法在X分钟内提交表单。 到目前为止,我已经想出迭代整个MySQL表,然后检查IP是否有点匹配。这个问题是有很多记录(Roughly 25,000),所以每次有人提交表格时我都要迭代25,000个条目,这很常见。

有没有更好的解决方案来使用它?

2 个答案:

答案 0 :(得分:2)

如果您想稍后对它们运行查询,请不要将IP地址存储为字符串。使用 ip2long

将它们转换为正确的数字地址
  

ip2long - 将包含(IPv4)Internet协议虚线地址的字符串转换为正确的地址

例如

echo ip2long("123.123.123.123");     //2071690107
echo "\n";
echo ip2long("123.123.123.124");    //2071690108

注意模式(1+)?现在您可以轻松地比较两者并在该值上创建索引,这样您的数据库就不必扫描所有表。

获得该格式的IP地址后,您可以编写一些简单的数学公式来检查您愿意检查的正确子网范围。

<强> Fiddle

答案 1 :(得分:0)

IPv4地址可以表示为32位整数,MySQL可以使用函数INET_ATON()进行转换,或者您可以使用PHP函数ip2long()来转换和比较IP是否在给定范围。