程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP的ip2long有bug,請慎用

PHP的ip2long有bug,請慎用

編輯:關於PHP編程

先看看下邊這段PHP代碼。這段使用ip2long函數,對同一個IP進行轉換。當然,也有人認為58.99.011.1和058.99.011.1算不上合法的

IP,那就Return,此文對你沒有幫助。

為什麼要使用帶前導零的ip:為了在數據庫中查詢,這個可以在IP庫中定位到ip所對應的位置信息。雖然沒有整型的IP查詢效率高,但畢竟直觀啊。

view plaincopy to clipboardprint?
<?php 
echo ip2long(58.99.11.1),"<br/>";   //輸出是 979569409 
echo ip2long(58.99.011.1),"<br/>";  //輸出是 979568897 
echo ip2long(058.99.11.1),"<br/>";  //輸出是空 
?> 
<?php
echo ip2long(58.99.11.1),"<br/>";   //輸出是 979569409
echo ip2long(58.99.011.1),"<br/>";  //輸出是 979568897
echo ip2long(058.99.11.1),"<br/>";  //輸出是空
?>

 

在PHP 4.x,5.x中, 有前導零的ip轉換的結果都不正確。

解決辦法,使用寫自己的函數:

view plaincopy to clipboardprint?
function myip2long($ip){ 
   $ip_arr = split(.,$ip); 
   $iplong = (16777216 * intval($ip_arr[0])) + (65536 * intval($ip_arr[1])) + (256 * intval($ip_arr[2])) + intval($ip_arr[3]); 
   return $iplong; 
}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved