PHP中將ip地址轉成十進位制數的兩種實用方法

weixin_34054866發表於2016-06-24
As we all know that long2ip works as ip1.ip2.ip3.ip4 (123.131.231.212)

long ip => (ip1 * 256 * 256 * 256) + (ip2 * 256 * 256) + (ip3 * 256) + ip4
2072242132 => (123 * 256 * 256 * 256) + (131 * 256 * 256) + (231 * 256) + 212
But what would be pseudo code for converting this number back into an IP address?

Also what would be the most suitable way to store IP addresses in MySQL for a traffic analytics website which will have about over 500 
IP lookups per second? Would it be better if a table with unique IDs is created for every single IP and then that is used for lookups? Thanks
$long = ip2long("123.131.231.212");

$ip = array();
array_unshift($ip, $long & 0xFF);
array_unshift($ip, ($long >>= 8) & 0xFF);
array_unshift($ip, ($long >>= 8) & 0xFF);
array_unshift($ip, ($long >>= 8) & 0xFF);

// $ip =
// Array
// (
//     [0] => 123
//     [1] => 131
//     [2] => 231
//     [3] => 212
// )

現在PHP中有很多時候都會用到ip地址,但是這個ip地址獲取的時候都不是10進位制的。那麼PHP中如何將ip地址轉成十進位制數,下面為大家介紹下兩種方法可以輕鬆實現

PHP中如何將ip地址轉成十進位制數呢?現在PHP中有很多時候都會用到ip地址,但是這個ip地址獲取的時候都不是10進位制的。那麼PHP中如何將ip地址轉成十進位制數就是我們比較頭疼的事情了,下面兩種方法是我整理處理來相對比較簡單的IP地址轉成十進位制數的方法。希望能對大家有所幫助。

方法一、

public function ipToLong(){ 
$ip = $_SERVER['REMOTE_ADDR']; 
$ip = explode('.', $ip); 
$ip = array_reverse($ip);//陣列反轉 
$r = 0; 
for($i=0,$j=count($ip); $i<$j; $i++){ 
$r += $ip[$i] * pow(256, $i); 
} 
$r = sprintf("%u", $r); 
echo $r; 
} 

方法二、

public function ipToLong(){ 
$ip = $_SERVER['REMOTE_ADDR']; 
$ip = explode('.',$ip); 
$r = ($ip[0] << 24) | ($ip[1] << 16) | ($ip[2] << 8) | $ip[3]; 
if($r < 0) $r += 4294967296; 
echo $r ; 
} 

兩個結果在本地伺服器中的結果都是3232235877,運用的ip是192.168.1.101。我們用ping 192.168.1.101 和 ping 3232235877來進行檢測,看是否一樣。

相關文章