请问怎么用php来实现去获取某个用户的ip然后存到自己的数据库mysql中,给代码参考看看,谢谢

请问怎么用php来实现去获取某个用户的ip然后存到自己的数据库mysql中,给代码参考看看,谢谢,第1张

<?php 

error_reporting(0)

header("content-type:text/htmlcharset=utf-8")

$conn=mysql_connect("127.0.0.1","root","qaz123")

if (!$conn)

  {

  die('Could not connect: ' . mysql_error())

  }

mysql_select_db("test", $conn)

mysql_query("set names utf-8") 

$ip = ($_SERVER["HTTP_VIA"]) ? $_SERVER["HTTP_X_FORWARDED_FOR"] : $_SERVER["REMOTE_ADDR"]

$ip = ($ip) ? $ip : $_SERVER["REMOTE_ADDR"]

$time=time()

mysql_query("INSERT INTO visit (ip, time) values('$ip','$time')") 

/*

CREATE TABLE `visit` (

`id`  int NOT NULL AUTO_INCREMENT ,

`ip`  varchar(15) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,

PRIMARY KEY (`id`)

)

ENGINE=MyISAM

DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci

CHECKSUM=0

DELAY_KEY_WRITE=0

*/

大家一般都是用$_SERVER['REMOTE_ADDR']来获取用户IP,

但是如果使用了反向代理的,HTTP头中REMOTE_ADDR就不是用户的地址,反而是上一级代理的地址了。

经过我的研究有两种方法来获取用户的真实外网IP。

方法一:curl

复制代码代码如下:

function get_onlineip() {

$ch = curl_init('http://www.ip138.com/ip2city.asp')

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true)

$a = curl_exec($ch)

preg_match('/\[(.*)\]/', $a, $ip)

return $ip[1]

}

方法二:$_SERVER['HTTP_X_FORWARDED_FOR']来获取相应的地址

复制代码代码如下:

function get_onlineip() {

$onlineip = ''

if(getenv('HTTP_CLIENT_IP') &&strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) {

$onlineip = getenv('HTTP_CLIENT_IP')

} elseif(getenv('HTTP_X_FORWARDED_FOR') &&strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) {

$onlineip = getenv('HTTP_X_FORWARDED_FOR')

} elseif(getenv('REMOTE_ADDR') &&strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) {

$onlineip = getenv('REMOTE_ADDR')

} elseif(isset($_SERVER['REMOTE_ADDR']) &&$_SERVER['REMOTE_ADDR'] &&strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) {

$onlineip = $_SERVER['REMOTE_ADDR']

}

return $onlineip

}

php获取用户真实ip的方法:

方法1:

//获取REMOTE_ADDR属性,直接可以得到ip

$ip = $_SERVER["REMOTE_ADDR"]

echo $ip

方法2:

//从Server中获取HTTP_VIA,如果获取到就用HTTP_X_FORWARDED_FOR的值替换,如果获取不到就取REMOTE_ADDR的值。

$user_IP = ($_SERVER["HTTP_VIA"]) ? $_SERVER["HTTP_X_FORWARDED_FOR"] :

$_SERVER["REMOTE_ADDR"]

$user_IP = ($user_IP) ? $user_IP : $_SERVER["REMOTE_ADDR"]

echo $user_IP

方法3:

function getRealIp()

{

$ip=false//初始化ip为false

if(!empty($_SERVER["HTTP_CLIENT_IP"])){ //如果HTTP_CLIENT_IP不为空

$ip = $_SERVER["HTTP_CLIENT_IP"]//获取HTTP_CLIENT_IP的值

}

if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { //如果HTTP_X_FORWARDED_FOR不为空

$ips = explode (", ", $_SERVER['HTTP_X_FORWARDED_FOR'])

//把HTTP_X_FORWARDED_FOR的值用,分割后存放数组ips

if ($ip) { array_unshift($ips, $ip)$ip = FALSE}//遍历处理

for ($i = 0$i <count($ips)$i++) {

if (!eregi ("^(10│172.16│192.168).", $ips[$i])) {

$ip = $ips[$i]//获得真实ip

break

}

}

}

return ($ip ? $ip : $_SERVER['REMOTE_ADDR'])

}

echo getRealIp()


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/6698874.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-03-26
下一篇2023-03-26

发表评论

登录后才能评论

评论列表(0条)

    保存