簡體   English   中英

在PHP中獲取錯誤的IP地址

[英]getting wrong IP address in php

我有以下php代碼來獲取vistor ip

 function VisitorIP()
  { 
  if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
  $TheIp=$_SERVER['HTTP_X_FORWARDED_FOR'];
  else $TheIp=$_SERVER['REMOTE_ADDR'];
  return trim($TheIp);
  }
  $Users_IP_address = VisitorIP();

但是每次我在本地主機上執行此腳本時,都會得到:: 1作為IP

我如何獲得確切的Internet IP和系統IP地址,因為我的腳本將在LAN nwteork上運行,並且我想記錄lan pc和Internet IP的IP並將其保存在mysql數據庫中。

我需要專用於本地系統IP和系統Internet IP的PHP代碼。

謝謝

從技術上講,您將獲得正確的IP。 ::1是您的回送(localhost)IPv6地址。

首先,丟掉這個愚蠢的函數,因為HTTP_X_FORWARDED_FOR不是IP地址,而僅僅是HTTP標頭,並且使其變得僅僅是

$Users_IP_address = $_SERVER['REMOTE_ADDR'];

接下來,您必須設置服務器以使用ipv4,而不是ipv6。
盡管這並不是真正的PHP問題,應該在serverfault上進行詢問,並提供完整的系統設置:操作系統,版本,您的權利等。

當您在本地主機上運行以上腳本時,可以獲得::1結果。

這很常見。

如果要使用本地主機獲取系統IP地址,請使用此代碼。

1) localhost腳本

<?PHP

$ip = @file_get_contents("http://www.apps-tube.com/apps/ip-address/ip.php");

echo $ip;

?>

2) Servers腳本

<?PHP

function getUserIP()
{
    $client  = @$_SERVER['HTTP_CLIENT_IP'];
    $forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
    $remote  = $_SERVER['REMOTE_ADDR'];

    if(filter_var($client, FILTER_VALIDATE_IP))
    {
        $ip = $client;
    }
    elseif(filter_var($forward, FILTER_VALIDATE_IP))
    {
        $ip = $forward;
    }
    else
    {
        $ip = $remote;
    }

    return $ip;
}


$user_ip = getUserIP();

echo $user_ip; // Output IP address [Ex: 177.87.193.134]


?>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM