Phi*_*ses 0 javascript php mysql codeigniter geolocation
我使用来自(http://www.iplocationtools.com)的javascript API来提供来自访问者IP的位置数据.出于某种原因,他们的API不会给我访问者的实际IP,只有其他信息,这就是为什么我必须使用PHP和CodeIgniter来给我IP.
所以我使用CodeIgniter/PHP获取访问者的IP,并使用PHP的ip2long([ip code igniter gives me])将其与上面的位置数据一起添加到数据库中
当数据库表看起来像这样时我很困惑:http://pulse.media.mit.edu/images/1.png
哪个错了?我很想相信CodeIgniter是错的,因为它给了我很多次相同的IP.年龄和性别是自我报告的,我怀疑一个人正在编制所有这些信息.
在一天结束时,我们真正需要的是用户IP和位置,最好来自同一来源,因此我们不会出现复合错误.
谁有更好的想法如何做到这一点?
编辑:这是我用来从CodeIgniter获取IP地址的代码
$data['ip_address'] = ip2long($this->input->ip_address());
$this->pulse_model->voter_info($data);
Run Code Online (Sandbox Code Playgroud)
然后,voter_info函数将其插入到数据库中,并将其存储为INT(11).
这是函数ip_address:
function ip_address(){if($ this-> ip_address!== FALSE){return $ 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;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1062 次 |
最近记录: |