使用PHP检查IP地址

3

我正在编写一个关于图标式点赞/踩的评分系统,该评分系统应该允许用户只进行一次评价。我在数据库中有一个名为rating的SQL表格,其中包含列:id、itemname、commentno。还有另一个表格ip_check,包括列:id、commentno、ip

commentno将是外键,获取IP地址的语法应该像这样:<?php $ip = $_SERVER['REMOTE_ADDR']; ?>。我在像这样的链接上检查了在线的代码。

现在,有什么适当且最简便的方法来添加mysql if条件呢?我也查看了这个链接,但我仍然在寻找更具体的帮助,请问有没有人能提供帮助?


有什么好处呢?不允许单个用户投票超过一次,您难道没有足够的安全性吗?如果一个地址有多个用户怎么办? - Elias
1个回答

3

在Mysql中,我推荐使用Mysql函数INET_NTOA()INET_ATON()进行保存操作。

在验证和获取IP地址时,我使用以下函数:

function is_ip($ip) {
    global $localIPs;
    $test = 0;
    $pattern='/^(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])$/';
    $ip = explode(',', $ip);
    $ip = array_map('trim', $ip);
    foreach ($ip as $key => $value) {
        if(array_search($value, $localIPs)===false && preg_match($pattern, $value)) $test = $value;
    }
    if(!empty($test)) return $test;
    else return false;
}

function get_ip() {
    $ip='';
    if(!empty($_SERVER['HTTP_X_REAL_IP']) && is_ip($_SERVER['HTTP_X_REAL_IP'])) $ip=is_ip($_SERVER['HTTP_X_REAL_IP']);
    elseif(!empty($_SERVER['HTTP_CLIENT_IP']) && is_ip($_SERVER['HTTP_CLIENT_IP'])) $ip=is_ip($_SERVER['HTTP_CLIENT_IP']);
    elseif(!empty($_SERVER['HTTP_X_FORWARDED_FOR']) && is_ip($_SERVER['HTTP_X_FORWARDED_FOR'])) $ip=is_ip($_SERVER['HTTP_X_FORWARDED_FOR']);
    else $ip=is_ip($_SERVER['REMOTE_ADDR']);
    return $ip;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接