php獲取ip的函數
Ⅰ 利用php怎麼獲取用戶ip
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();
Ⅱ php注冊系統咋么獲得用戶ip
只需要一行代碼即可!~~
$ip=$_SERVER['REMOTE_ADDR']; // 獲取訪客的 IP
Ⅲ php獲取IP地址的三個函數區別
以下資料供參考:
1、REMOTE_ADDR 瀏覽當前頁面的用戶計算機的ip地址
2、HTTP_X_FORWARDED_FOR 瀏覽當前頁面的用戶計算機的網關
3.HTTP_CLIENT_IP 客戶端的ip
在PHP 中使用 REMOTE_ADDR 來取得客戶端的 IP 地址,但如果客戶端是使用代理伺服器來訪問,那取到的就是代理伺服器的 IP 地址,而不是真正的客戶端 IP 地址。
要想透過代理伺服器取得客戶端的真實 IP 地址,就要使用 HTTP_X_FORWARDED_FOR 來讀取。
不過要注意的事,並不是每個代理伺服器都能用 HTTP_X_FORWARDED_FOR 來讀取客戶端的真實 IP,有些用此方法讀取到的仍然是代理伺服器的 IP。
還有一點需要注意的是:如果客戶端沒有通過代理伺服器來訪問,那麼HTTP_X_FORWARDED_FOR 取到的值將是空的。
Ⅳ php如何獲得訪問區域網內的伺服器的用戶的真實ip,即外網ip。
/**
* 獲取客戶端IP地址
*/
static public function getClientIP() {
static $ip = NULL;
if ( $ip !== NULL )
return $ip;
if ( isset( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) {
$arr = explode( ',', $_SERVER['HTTP_X_FORWARDED_FOR'] );
$pos = array_search( 'unknown', $arr );
if ( false !== $pos )
unset( $arr[$pos] );
$ip = trim( $arr[0] );
} elseif ( isset( $_SERVER['HTTP_CLIENT_IP'] ) ) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif ( isset( $_SERVER['REMOTE_ADDR'] ) ) {
$ip = $_SERVER['REMOTE_ADDR'];
}
// IP地址合法驗證
$ip = ( false !== ip2long( $ip ) ) ? $ip : '';
return $ip;
}
Ⅳ PHP怎麼獲取當前電腦的IP
本文所述php實例可以完成獲取區域網所有用戶的電腦IP和主機名、及mac地址的功能,對於php程序設計人員有一定的參考借鑒價值。完整代碼如下:
<?php
$bIp = gethostbyname($_ENV['COMPUTERNAME']); //獲取本機的區域網IP
echo "本機IP:",$bIp,"\n";
echo "本機主機名:",gethostbyaddr($bIp),"\n\n\n"; //gethostbyaddr 函數可以根據區域網IP獲取主機名
//默認網關IP
list($ipd1,$ipd2,$ipd3) = explode('.',$bIp);
$mask = $ipd1 . "." . $ipd2 . "." . $ipd3 ;
exec('arp -a',$aIp); //獲取區域網中的其他IP
foreach( $aIp as $ipv) {
if(strpos($ipv,'介面') !== false) {//一下顯示的IP是否是當前區域網中的 而不是其他的類型 可以在cmd下試一下命令
$bool = false;
preg_match('/(?:(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))\.){3}(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))/',$ipv,$arr);
if(strcmp($arr[0],$bIp) == 0) {
$bool = true;
}
} else {
if($bool) {
$str = preg_replace('/\s+/', '|', $ipv);
$sArr = explode('|',$str);
if($sArr[1] == 'Internet' || empty($sArr[1])) {
continue;
}
//去除默認網關
if(strcmp($mask . ".1", $sArr[1]) == 0) {
continue;
}
//去除同網關下255的IP
if(strcmp($mask . ".255", $sArr[1]) == 0) {
continue;
}
//去除組播IP
list($cIp) = explode('.', $sArr[1]);
if($cIp >= 224 && $cIp <= 239) {
continue;
}
echo "IP地址:|",$sArr[1],"|\n";
echo "MAC地址:",$sArr[2],"\n";
echo "主機名:",gethostbyaddr($sArr[1]),"\n";
echo "\n\n";
}
}
}