[英]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.