簡體   English   中英

使用PHP獲取IP地址以正確顯示

[英]Getting IP address with PHP to display correctly

我正在嘗試使用時間和IP地址為用戶注冊該站點生成唯一的ID。 我正在使用的數據庫是MySQL ,它具有自動遞增功能,但似乎並不實用。 $_SERVER['REMOTE_ADDR']返回無法讀取的地址時出現問題。 我正在螢火蟲控制台中獲取該值的符號。 我嘗試使用inet_ntopinet_pton ,都沒有用。

$ip_address = $_SERVER['REMOTE_ADDR'];
$test = inet_ntop($ip_address);
echo($test);

為什么我得到符號而不是可讀的文本?

編輯:

我要存儲的是IP和時間的組合。 我需要IP以“ 79.104.97.105”的格式顯示-Niet the Dark Absol,但是如果使用inet_ntop或inet_pton或,我得到的是 :: 1,如果我僅使用$ _SERVER ['REMOTE_ADDR']。

有兩個部分的問題:1)如果IP地址返回:: 1,我是否將其獲取為IPv6,2)我如何轉換為我認為是IPv4的127.0.0.1

inet_ntop()需要二進制格式的地址。

范例

$packed = chr(127) . chr(0) . chr(0) . chr(1);
$expanded = inet_ntop($packed);

/* Outputs: 127.0.0.1 */
echo $expanded;

您需要使用inet_pton()代替,它要求IP以$_SERVER['REMOTE_ADDR']格式提供。

更新

在問題中,您指出您需要可讀格式的地址。

echo $_SERVER['REMOTE_ADDR'];

該變量已經包含人類可讀格式的IP,不需要任何PHP函數對其進行轉換。

您可以嘗試以下功能:

function getRealIP(){
    if (!empty($_SERVER['HTTP_CLIENT_IP'])){
      $ip = $_SERVER['HTTP_CLIENT_IP'];
    }else if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){
      $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
    }else{
      $ip = $_SERVER['REMOTE_ADDR'];
    }
    return $ip;
}

編輯

這個問題可能會對您有幫助,我認為他也有同樣的問題: MAMP是否應將:: 1作為本地主機上的IP返回?

暫無
暫無

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

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