2012-02-09 31 views
0

下面的代碼似乎只返回我的IP地址的前兩位數字。我如何獲得完整的IP地址?獲取完整的IP地址以顯示在MySQL中

$ip2 = $_SERVER['REMOTE_ADDR']; 

編輯:我把它到MySQL爲varchar(30)latin1_swedish_ci。是否有格式變化會顯示完整的IP?

編輯2:也許這是我的查詢,正在改變格式。這是:

$query1 = sprintf("INSERT INTO values VALUES (NULL, 'phoenix', %d, '%s', %d, %d, %d, NULL)", $submissionid, $fullurl, $uid, $ip1, $ip2); 

mysql_query($query1) or die(mysql_error()); 
+0

你在localhost或外部服務器上運行它嗎?你是將它保存到數據庫還是隻是迴應它? – VictorKilo 2012-02-09 23:14:30

+0

你能展示更多的代碼嗎?這應該給整個知識產權。 – 2012-02-09 23:15:13

回答

4

絕對沒有錯

$ip2 = $_SERVER['REMOTE_ADDR']; 

你說的似乎只包含前兩位,但我猜你做這樣的假設,因爲$query1只包含。

問題是,您在sprintf()中使用%d,它試圖獲得整數值$ip2。 IP地址不是整數,而是字符串,因此您應該使用%s

sprintf("INSERT INTO values VALUES (NULL, 'phoenix', %d, '%s', %d, '%s', '%s', NULL)", 
    $submissionid, $fullurl, $uid, $ip1, $ip2); 
0

把%s,而不是%d將插入IP地址的工作。

2

我同意這個PHP是好的。

但是...

在一個varchar(30)存儲是一個壞想法。您似乎認爲您將始終獲得IPv4地址。你不會的。

舉個例子來說:

2001:470:1f04:德:22cf:30ff:feb0:E22B

,將不適合在你的領域!

+0

+1 ipv6即將到來!那麼,最終......也許。 – msanford 2012-02-10 14:30:16