"
>
"
>
<?php
/*
*/
//將ip轉換為數字
function
ipton(
$ip
)
$ipstr
.=
$iphex
;
//將四段ip的16進製制數連線起來,得到乙個16進製制字串,長度為8
}
return
hexdec(
$ipstr
);
//將16進製制字串轉換成10進製,得到ip的數字表示
}
//將數字轉換為ip,進行上面函式的逆向過程
function
ntoip(
$n
)
//這是因為ipton函式得到的16進製制字串,如果第一位為0,在轉換成數字後,是不會顯示的
//所以,如果長度小於8,肯定要把第一位的0加上去
//為什麼一定是第一位的0呢,因為在ipton函式中,後面各段加的'0'都在中間,轉換成數字後,不會消失
for
(
$i
=0,
$j
=0;
$j
<
$len
;
$i
=
$i
+1,
$j
=
$j
+2)
$ip
=hexdec(
$ippart
);
//將每段16進製制數轉換成對應的10進製數,即ip各段的值
}
$ip
=
array_reverse
(
$ip
);
return
implode(
'.'
,
$ip
);
//連線各段,返回原ip值
}
echo
ipton(
'119.255.31.226'
);
echo
'
';
$num
=
'379374783'
;
echo
strlen
(
$num
).
'
';
echo
ntoip(
$num
).
'
';
echo
'trueipnum:'
.
ip2long
(
'119.255.31.226'
).
'
';
echo
'trueip:'
.long2ip(
'3793747831'
);
?>
mysql自帶了inet_aton函式來實現將ip位址轉換為數字,inet_ntoa函式將數字轉換為ip。select inet_aton
('10.122.22.1'
)
上面的轉換函式為站長原創,碰巧實現了跟mysql系統函式相同的轉換效果,呵呵,興奮好久~~
原來php提供了ip2long和long2ip2個函式來實現ip與數字的轉換,站長做了無用功了,不過權當鍛鍊邏輯思維吧~~
這是兩種實現方法,一種是在程式上實現;一種是直接在sql語句中實現,很方便,不錯,儲存下來了,發到自己的部落格,以後就不會忘記了。把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位址.
解決的辦法很多,比如可以用mysql的函式:inet_aton和inet_ntoa來處理ip位址;或者把儲存ip位址的字段改為bigint型別,這樣在64位機器上雖然儲存的是3395898803,使用long2ip函式仍能得到正確的結果.
PHP實現IP 數字互相轉換
將ip轉換為數字 function ipton ip ipstr iphex 將四段ip的16進製制數連線起來,得到乙個16進製制字串,長度為8 return hexdec ipstr 將16進製制字串轉換成10進製,得到ip的數字表示 將數字轉換為ip,進行上面函式的逆向過程 function n...
PHP中IP位址與整型數字互相轉換詳解
ip轉換成整型儲存是資料庫優化一大趨勢,不程式設計客棧少人目前儲存ip時還在使用字串型別儲存,字串索引比整型索引消耗資源很多,特別是表中資料量大的時候,以及求查詢某乙個ip段的資料,今天說的ip是指ip4,ip6不在本文範圍內。系統函式ip2long與long2ip php中有內建函式ip2long...
c 當前時間與數字互相轉換
1,1900年1月1日 datetime oldtime convert.todatetime 1900 1 1 00 00 00 構造1900年1月1日 timespan ts datetime.now.subtract oldtime 計算從1900年1月1日到現在的時間間隔 double nu...