php - 使用 PHP 的 IP 地址不可靠

标签 php javascript mysql codeigniter geolocation

我使用来自 (http://www.iplocations.com) 的 javascript API 为我提供来自访问者 IP 的位置数据。出于某种原因,他们的 API 不会给我访问者的实际 IP,只会给我其他信息,这就是为什么我必须使用 PHP 和 CodeIgniter 来给我 IP。

所以我使用 CodeIgniter/PHP 获取访问者的 IP,并使用 PHP 的 ip2long([the ip code igniter gives me]) 将其与上面的位置数据一起添加到数据库

当我的数据库表看起来像这样时,我很困惑:http://pulse.media.mit.edu/images/1.png

哪个错了?我很想相信 CodeIgniter 是错误的,因为它多次给我相同的 IP。年龄和性别是 self 报告的,我怀疑有人在编造所有这些信息。

归根结底,我们真正需要的只是用户的 IP 和位置,最好来自同一来源,这样我们就不会出现错误。

有人对如何做到这一点有更好的想法吗?

编辑:这是我用来从 CodeIgniter 获取 IP 地址的代码

$data['ip_address'] = ip2long($this->input->ip_address());
$this->pulse_model->voter_info($data);

然后 voter_info 函数只是将它插入到数据库中,在那里它被存储为一个 INT(11)。

这里是 ip_address 函数:

函数 ip_address() { 如果 ($this->ip_address !== FALSE) { 返回 $this->ip_address;

    if (config_item('proxy_ips') != '' && $this->server('HTTP_X_FORWARDED_FOR') && $this->server('REMOTE_ADDR'))
    {
        $proxies = preg_split('/[\s,]/', config_item('proxy_ips'), -1, PREG_SPLIT_NO_EMPTY);
        $proxies = is_array($proxies) ? $proxies : array($proxies);

        $this->ip_address = in_array($_SERVER['REMOTE_ADDR'], $proxies) ? $_SERVER['HTTP_X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR'];
    }
    elseif ($this->server('REMOTE_ADDR') AND $this->server('HTTP_CLIENT_IP'))
    {
        $this->ip_address = $_SERVER['HTTP_CLIENT_IP'];
    }
    elseif ($this->server('REMOTE_ADDR'))
    {
        $this->ip_address = $_SERVER['REMOTE_ADDR'];
    }
    elseif ($this->server('HTTP_CLIENT_IP'))
    {
        $this->ip_address = $_SERVER['HTTP_CLIENT_IP'];
    }
    elseif ($this->server('HTTP_X_FORWARDED_FOR'))
    {
        $this->ip_address = $_SERVER['HTTP_X_FORWARDED_FOR'];
    }

    if ($this->ip_address === FALSE)
    {
        $this->ip_address = '0.0.0.0';
        return $this->ip_address;
    }

    if (strpos($this->ip_address, ',') !== FALSE)
    {
        $x = explode(',', $this->ip_address);
        $this->ip_address = trim(end($x));
    }

    if ( ! $this->valid_ip($this->ip_address))
    {
    $this->ip_address = '0.0.0.0';
    }
    return $this->ip_address;
}

最佳答案

$_SERVER['REMOTE_ADDR'] 是返回查看页面的人的 IP 地址的 PHP 代码。

关于php - 使用 PHP 的 IP 地址不可靠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6970901/

相关文章:

java - 使用 jComboBox 从数据库中过滤 jTable 数据

php - 在 PHP 中运行两个 SQL 查询,其中第一个语句创建一个临时表以供第二个语句使用

php - 如何将主题名称从默认更改为 laravel 中的任何名称

php - 在 ubuntu 11.10 的终端和浏览器中显示不同的 php 版本

javascript - 如何处理网站上的图像?

javascript - 使用 map 和 filter 处理具有相同值的项目

javascript - 如何从同名元素获取当前组合/文本框 ID(适用于新添加的元素)?

php - mysql存储正确和错误的答案字符串