2011-08-29 118 views
0

使用這段代碼獲取用戶的IP地址。我有我的數據庫表中的IP無符號整數字段在MySQL數據庫表中存儲IP地址的問題

<?php 
    if (!empty($_SERVER['HTTP_CLIENT_IP'])){ 
     $ip=$_SERVER['HTTP_CLIENT_IP']; 
    //proxy check 
    }elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){ 
     $ip=$_SERVER['HTTP_X_FORWARDED_FOR']; 
    }else{ 
     $ip=$_SERVER['REMOTE_ADDR']; 
    } 
    $ip = ip2long($ip); 
    ?> 

測試本地服務器中的網站。問題是,在ip2long轉換後獲得'63177408abbad957ed13ae1a2dd3e0b3ed47bd0b48ffcb362'。試過

$ip=$_SERVER['REMOTE_ADDR']; 
    $ip = ip2long($ip); 

也是。仍然沒有成功。我該如何解決它?

回答

5

你最有可能在一個32位的PHP安裝,這是腐敗的IP地址。嘗試做MySQL中的轉換,這不吃虧的問題:

$ip = mysql_real_escape_string('127.0.0.1'); 
$sql = "INSERT INTO yourtable (ip) VALUES (INET_ATON('$ip'));"; 

另一種方法是強制PHP把它當作一個無符號整數,按該注ip2long man page上:$ip = sprintf('%u', ip2long($ip));

另外,請記住,IPv6將在「現在的任何一天」被廣泛使用,並且您需要使用128位整數來存儲這些值(MySQL不支持 - 它至少必須是兩個64位bigint) 。

+0

現在變得':: 1' –

+0

這就是127.0.0.1的ipv6版本 –