校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > PHP基于ip2long實現IP轉換整形

PHP基于ip2long實現IP轉換整形

熱門標簽:招標自動語音外呼系統 ai電話機器人加盟代理 400電話鄭州申請 黔江400電話如何辦理 OMG地圖標注app 電銷機器人便宜的有嗎 gps 地圖標注軟件 地圖標注視頻廣告入駐 中原區電話機器人價格

如何將四個字段以點分開的IP網絡址協議地址轉換成整數呢?PHP里有這么一個函數ip2long.比如

?php
echo ip2long("10.2.1.3");
?>

我們將得到

167903491

這是如何計算的,目前我知道有兩個算法。其一

?php
function ip2int($ip){
  //我們先把ip分為四段,$ip1,$ip2,$ip3,$ip4
  list($ip1,$ip2,$ip3,$ip4)=explode(".",$ip);
  //然后第一段乘以256的三次方,第二段乘以256的平方,第三段乘以256
  //這即是我們得到的值
  return $ip1*pow(256,3)+$ip2*pow(256,2)+$ip3*256+$ip4;
}
?>

其二,用位運算

?php
function ip2int($ip){
  list($ip1,$ip2,$ip3,$ip4)=explode(".",$ip);
  return ($ip124)|($ip216)|($ip38)|($ip4);
}
?>

我們會發現,有些ip轉化成整數后,是負的,這是因為得到的結果是有符號整型,最大值是2147483647.要把它轉化為無符號的,可以用
sprintf("%u",ip2long($ip);

就能轉換為正整數。而且得到的結果用long2ip也可以正常轉換回原來的ip地址。也可以用ip2long來驗證一個ip是否是有效的,如

?php
function chk_ip($ip){
  if(ip2long($ip)=="-1") {
    return false;
  }
  return true;
}
//應用
var_export(chk_ip("10.111.149.42"));
var_export(chk_ip("10.111.256.42"));
?>

將輸出true和false

把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底層運行機制與工作原理詳解
  • PHP7數組的底層實現示例
  • PHP的運行機制與原理(底層)
  • 基于PHP實現發微博動態代碼實例
  • PHP isset empty函數相關面試題及解析
  • PHP數組實際占用內存大小原理解析
  • PHP哈希表實現算法原理解析
  • 深入解析PHP底層機制及相關原理

標簽:濟源 那曲 日照 阿里 孝感 池州 哈密 北京

巨人網絡通訊聲明:本文標題《PHP基于ip2long實現IP轉換整形》,本文關鍵詞  PHP,基于,ip2long,實現,轉換,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《PHP基于ip2long實現IP轉換整形》相關的同類信息!
  • 本頁收集關于PHP基于ip2long實現IP轉換整形的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 工布江达县| 玉门市| 涪陵区| 昌乐县| 东方市| 平山县| 乐陵市| 盈江县| 新宁县| 阜康市| 吉林省| 濮阳县| 田东县| 福泉市| 民勤县| 江北区| 仁化县| 漠河县| 淮安市| 枣阳市| 东乡| 治县。| 萍乡市| 宝山区| 常宁市| 台东市| 迁安市| 牟定县| 营口市| 阿城市| 斗六市| 左云县| 桃园市| 山西省| 汨罗市| 永仁县| 霍林郭勒市| 房山区| 昌平区| 罗山县| 乐业县|