IP與數字互相轉換(PHP )

2021-07-04 00:25:53 字數 3538 閱讀 2542

">

">

<?php

/*

*/

//將ip轉換為數字

functionipton($ip)

$ipstr.=$iphex;//將四段ip的16進製制數連線起來,得到乙個16進製制字串,長度為8

}

returnhexdec($ipstr);//將16進製制字串轉換成10進製,得到ip的數字表示

}

//將數字轉換為ip,進行上面函式的逆向過程

functionntoip($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);

returnimplode('.',$ip);//連線各段,返回原ip值

}

echoipton('119.255.31.226');

echo'

';

$num='379374783';

echostrlen($num).'

';

echontoip($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...