客戶端IP返回::1的解決辦法,及IP轉換整形(ip2long)

剛剛測試程序,一個功能要求獲取客戶端IP,然而在本機測試過程中發現,客戶端(本機)IP始終返回::1,獲取 IP 部份的代碼如下:

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

PHP裏有這麼一個函數ip2long.比如

<?php
echo ip2long("10.2.1.3");//我們將得到167903491
?>

這是如何計算的,目前我知道有兩個算法。其一

<?php
function ip2int($ip){
    //我們先把ip分爲四段,$ip1,$ip2,$ip3,$ip4
    list($ip1,$ip2,$ip3,$ip4)=explode(".",$ip);
    //然後第一段乘以256的三次方,第二段乘以256的平方,第三段乘以256
    //這即是我們得到的值
    return $ip1*pow(256,3)+$ip2*pow(256,2)+$ip3*256+$ip4;
}
?>

把ip數據保存在數據庫(MySQL)中時候,我們習慣用ip2long函數生成整型,然後存放在一個int(11)類型的字段中,但是,在不同的系統平臺上,ip2long函數得到的值是不同的,因此可能造成在從數據庫中讀出數據,用long2ip得到ip的時候產生錯誤,說一下我們碰到的情況:
我們用一個int(11)類型(範圍-2147483648 - 2147483647)來保存把一個ip地址用ip2long處理得到的結果,例如ip是’202.105.77.179′,那麼在32位機器上得到的結果是:-899068493,而在64位機器上卻得到3395898803.然後把它寫入數據庫,由於超過int(11)的範圍,因此64位機器上的結果被保存爲int(11)的最大值:2147483647.於是在從數據庫中取出的時候,便得到了錯誤的結果,會得到”127.255.255.255″這個ip地址.
今天在往數據庫裏插入IP時打印$_SERVER['REMOTE_ADDR']IP始終返回::1
用到兩種方法,
1:我想應該是localhost引起的,於是查看host映射,(Host映射查看方法 C:\Windows\System32\drivers\etc 文件hosts);刪除::1 localhost仍然不管用。
2:自己百度看到這個問題:我的php獲取的本地ip地址是::1 ?
最佳答案是
::1說明你的電腦開啓了ipv6支持,這是ipv6下的本地迴環地址的表示。
因爲你訪問的時候用的是localhost訪問的,是正常情況。
使用ip地址訪問或者關閉ipv6支持都可以不顯示這個。
後來我又嘗試關閉ipv6,仍然顯示::1;算是知道原因了,但是解決辦法仍無頭緒。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章