使用php检查IP地址

时间:2013-09-19 13:07:14

标签: php mysql sql

我正在为物品写一个拇指上/下评级系统,评级系统应该允许用户只评价一次。我在数据库中有一个名为 rating 的SQL表,其中包含以下列: id,itemname,commentno 。另一个表 ip_check 包含: id,commentno,ip。

commentno将是一个外键,获取ip的语法应如下所示:<?php $ip = $_SERVER['REMOTE_ADDR']; ?>因为我在this one等几个链接上进行了检查。

现在添加mysql if条件的正确和最简单的方法是什么。我也检查了这个link,但我还在寻找更具体的内容,对此有何帮助?

1 个答案:

答案 0 :(得分:2)

对于保存和在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;
}