2014-10-01 34 views
0

我試圖使用時間和IP地址來爲用戶註冊站點時生成唯一的ID。我使用的數據庫是MySQL,它帶有自動增量,但它似乎不是一個實用的技術。我遇到的問題是$_SERVER['REMOTE_ADDR']返回了一個不可讀的地址。我在firebug控制檯中獲取了符號。我嘗試使用inet_ntopinet_pton,都沒有工作。使用PHP獲取IP地址以正確顯示

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

爲什麼我得到符號而不是可讀文本?

編輯:

我想存儲的是IP和時間的組合。我需要IP以「79.104.97.105」的格式顯示 - 不過黑暗的Absol,但我得到的是如果我使用inet_ntop或inet_pton或:: 1如果我只用$ _SERVER ['REMOTE_ADDR']。

問題的兩個部分:1)我是否獲得了IP地址的IPv6如果返回:: 1,2)如何轉換爲127.0.0.1我認爲這是IPv4的

+0

這是因爲'$ _ SERVER [ 'REMOTE_ADDR' ]'沒有包裝。做'echo $ _SERVER ['REMOTE_ADDR']'你會看到。你看到的輸出是什麼。 – 2014-10-01 13:51:27

+0

嘗試'回聲inet_pton(「79.104.97.105」)' - 這可能會給你一個提示,這是怎麼回事;) – 2014-10-01 13:52:18

+0

它返回:: 1 我明白,這是假設是因爲它的IPv6,但我需要它像IPv4這樣的完整格式。 – user2812097 2014-10-01 13:55:15

回答

4

inet_ntop()在期待地址二進制格式。

Example

$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函數來轉換它。

+0

當我使用,這是return語句: – user2812097 2014-10-01 13:53:57

+0

好了,'inet_pton'的IP轉換成二進制格式,所以你看到這個。也許你應該擴大你實際想要存儲在數據庫中的問題。 – 2014-10-01 13:55:18

+0

@GeraldSchneider他編輯了這個問題:':: 1如果我只用$ _SERVER ['REMOTE_ADDR']。' – DanFromGermany 2014-10-01 14:08:27

0

你可以試試這個功能:

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; 
} 

編輯

這個問題可以幫助你,我覺得他有同樣的問題:Should a MAMP return ::1 as IP on localhost?

+0

檢查代理+1的所有頭文件總是好的,但答案1.沒有解釋2.與OPs問題-1無關。 – DanFromGermany 2014-10-01 13:54:57

+0

那麼,OP說:'我遇到了$ _SERVER ['REMOTE_ADDR']返回一個不可讀地址的問題。'當我回顯打印在這裏的函數時,我得到了明確的IP地址@ 127。 0.0.1所以對我來說,如果不是不是一個不好的意圖,那就是相關的抱歉。 – 2014-10-01 14:00:48

+0

那麼,OP已經寫了一個令人困惑的問題,但閱讀他的編輯。他從'$ _SERVER ['REMOTE_ADDR']''1'獲得'1' – DanFromGermany 2014-10-01 14:09:02