日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > php教程 > PHP IP地址與整型互相轉換詳解

PHP IP地址與整型互相轉換詳解

來源:程序員人生   發布時間:2014-01-29 16:15:47 閱讀次數:2418次

昨天要判斷用戶IP來源,然后再輸入用戶IP所在網段所在地址,我們第一條就需要把IP地址與整型互相轉換功能實現,下面我來看看.

系統函數ip2long與long2ip

PHP中有內置函數ip2long可以將ip地址轉換整型,代碼如下:

$ip = '210.110.11.49';echo ip2long($ip);

輸出:-764540111,輸出的整型有負號是因為我們得到的結果是有符號整型,有符號整型最大值2147483647,要把結果轉換為無符號型可以這么寫 3530427185

使用long2ip把整型轉換回ip地址,代碼如下:

  1. $ip = '210.110.11.49'
  2. $ip_int = ip2long($ip); 
  3. echo $ip."<br />"
  4. echo $ip_int."<br />"
  5. echo long2ip($ip_int); 

輸出:210.110.11.49,-764540111,210.110.11.49

從結果可以看到,ip與整型可以通過函數完成。

系統函數小bug:這中bug網上一搜都是,大意說的是ip某段加個前導0,先來看看這個bug實例,代碼如下:

  1. $ip = '210.110.011.49'
  2. $ip_int = ip2long($ip); 
  3. echo $ip."<br />"
  4. echo $ip_int."<br />"
  5. echo long2ip($ip_int); 
  6. //輸出: 
  7. //210.110.011.49 
  8. //-764540623 
  9. //210.110.9.49 

轉換結果不匹配,我們試著在ip第一段數字前加前導0,再看看如下代碼:

  1. $ip = '021.110.11.49'
  2. $ip_int = ip2long($ip); 
  3. echo $ip."<br />"
  4. echo $ip_int."<br />"
  5. echo long2ip($ip_int); 
  6. //輸出: 
  7. //021.110.11.49 
  8. //292424497 
  9. //17.110.11.49 

轉換結果都出錯,以上例子都是因為加了前導0后導致轉換結果出錯,連帶逆轉結果與原轉換ip不匹配.

轉換原理,目前有兩個算法:

第一、第一段乘以256的三次方,第二段乘以256的平方,第三段乘以256、最后總和,代碼如下:

  1. $ip = '0210.110.11.49'
  2. function ipToInt($ip){ 
  3. $iparr = explode('.',$ip); 
  4. $num = 0; 
  5. for($i=0;$i<count($iparr);$i++){ 
  6. $num += intval($iparr[$i]) * pow(256,count($iparr)-($i+1)); 
  7. return $num
  8. echo $ip.'<br />'
  9. $ip_int = ipToInt($ip); 
  10. echo $ip_int.'<br />'
  11. echo long2ip($ip_int); 
  12. //輸出: 
  13. //0210.110.11.49 
  14. //3530427185 
  15. //210.110.11.49 

第二、通過位運算符,代碼如下:

  1. $ip = '0210.110.11.49'
  2. function ipToInt($ip){ 
  3. $iparr = explode('.',$ip); 
  4. return (intval($iparr[0]<<24))|(intval($iparr[1])<<16)|(intval($iparr[2])<<8)| (intval($iparr[3])); 
  5. echo $ip.'<br />'
  6. $ip_int = ipToInt($ip); 
  7. echo $ip_int.'<br />'
  8. echo long2ip($ip_int); 
  9. //輸出: 
  10. //0210.110.11.49 
  11. //-764540111 
  12. //210.110.11.49 

檢測IP是否合法

第一、自己遍歷檢測,代碼如下:

  1. function check_ip($ip){ 
  2. $iparr = explode('.',$ip); 
  3. foreach($iparr as $v){ if($v>255) return false; } 
  4. return true; 
  5. echo '210.285.11.49,'
  6. var_dump(check_ip('210.285.11.49')); 
  7. echo '<br />'
  8. echo '210.205.11.49,'
  9. var_dump(check_ip('210.205.11.49')); 
  10. //輸出: 
  11. //210.285.11.49,bool(false) 
  12. //210.205.11.49,bool(true) 

第二、使用ip2long返回,代碼如下:

  1. function check_ip($ip){ 
  2. if(ip2long($ip)) return true; 
  3. return false; 
  4. echo '210.285.11.49,'
  5. var_dump(check_ip('210.285.11.49')); 
  6. echo '<br />'
  7. echo '210.205.11.49,'
  8. var_dump(check_ip('210.205.11.49')); 
  9. //輸出: 
  10. //210.285.11.49,bool(false) 
  11. //210.205.11.49,bool(true)
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 在线一区二区三区 | 日本欧美中文字幕 | 欧美日韩免费网站 | 天天干婷婷 | 国产传媒av| 国产精品一区二区三区在线免费观看 | 在线观看成人av | 亚洲乱码国产乱码精品精 | 91精品啪在线观看国产81旧版 | 成年人视频在线免费观看 | 国产天堂av | 91夜夜蜜桃臀一区二区三区 | 欧美日韩一区二区三区视频 | 国产成人午夜视频 | 久久国产精品一区 | 国产专区一区二区三区 | 亚洲免费激情 | 成人动漫一区二区三区 | 国产精品久久久久久久久久尿 | 天天综合一区 | 国产欧美大片 | 亚洲午夜在线观看 | 狼人综合在线 | 老头搡老女人毛片视频在线看 | 国产女教师精品久久久av | 日韩欧美小视频 | 999成人网 | 日韩免费在线视频 | 亚洲第二区 | 国产精品亚洲一区 | 免费国产 | 岛国av大片| 久久麻豆 | 久久wwww | 国产精品久久久久久 | 亚洲专区在线 | 亚洲人成网站b2k3cm | 日韩视频专区 | 精精久久| 欧美精品成人一区二区三区四区 | 国产乱码一区二区三区 |