欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

PHP基于ip2long實現(xiàn)IP轉(zhuǎn)換整形

 更新時間:2020年12月11日 09:52:27   作者:ノGHJ  
這篇文章主要介紹了PHP基于ip2long實現(xiàn)IP轉(zhuǎn)換整形,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

如何將四個字段以點分開的IP網(wǎng)絡(luò)址協(xié)議地址轉(zhuǎn)換成整數(shù)呢?PHP里有這么一個函數(shù)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 ($ip1<<24)|($ip2<<16)|($ip3<<8)|($ip4);
}
?>

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

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

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

將輸出true和false

把ip數(shù)據(jù)保存在數(shù)據(jù)庫(MySQL)中時候,我們習(xí)慣用ip2long函數(shù)生成整型,然后存放在一個int(11)類型的字段中,但是,在不同的系統(tǒng)平臺上,ip2long函數(shù)得到的值是不同的,因此可能造成在從數(shù)據(jù)庫中讀出數(shù)據(jù),用long2ip得到ip的時候產(chǎn)生錯誤,說一下我們碰到的情況:

我們用一個int(11)類型(范圍-2147483648 - 2147483647)來保存把一個ip地址用ip2long處理得到的結(jié)果,例如ip是'202.105.77.179′,那么在32位機器上得到的結(jié)果是:-899068493,而在64位機器上卻得到3395898803.然后把它寫入數(shù)據(jù)庫,由于超過int(11)的范圍,因此64位機器上的結(jié)果被保存為int(11)的最大值:2147483647.于是在從數(shù)據(jù)庫中取出的時候,便得到了錯誤的結(jié)果,會得到”127.255.255.255″這個ip地址.

解決的辦法很多,比如可以用mysql的函數(shù):INET_ATON和INET_NTOA來處理ip地址;或者把保存ip地址的字段改為bigint類型,這樣在64位機器上雖然保存的是3395898803,使用long2ip函數(shù)仍能得到正確的結(jié)果.

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 淺談PHP中pack、unpack的詳細用法

    淺談PHP中pack、unpack的詳細用法

    這篇文章主要介紹了淺談PHP中pack、unpack的詳細用法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • php開發(fā)最強大的IDE編輯的phpstorm 2020.2配置Xdebug調(diào)試的詳細教程

    php開發(fā)最強大的IDE編輯的phpstorm 2020.2配置Xdebug調(diào)試的詳細教程

    這篇文章主要介紹了php開發(fā)最強大的IDE編輯的phpstorm 2020.2配置Xdebug調(diào)試,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • 基于Laravel 多個中間件的執(zhí)行順序詳解

    基于Laravel 多個中間件的執(zhí)行順序詳解

    今天小編就為大家分享一篇基于Laravel 多個中間件的執(zhí)行順序詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-10-10
  • 解析PHP中Exception異常機制

    解析PHP中Exception異常機制

    這篇文章主要介紹了解析PHP中Exception異常機制,本文通過異常的基本使用和一些常用的異常使用案例來解析說明該項概念,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • ThinkPHP的Widget擴展實例

    ThinkPHP的Widget擴展實例

    這篇文章主要介紹了ThinkPHP的Widget擴展 ,需要的朋友可以參考下
    2014-06-06
  • Laravel 5框架學(xué)習(xí)之環(huán)境與配置

    Laravel 5框架學(xué)習(xí)之環(huán)境與配置

    本文給大家主要介紹的是Laravel5框架中的環(huán)境配置,給大家詳細介紹了.env的配置文件,包含的數(shù)據(jù)庫配置信息的詳細解釋,這里推薦給大家,有需要的小伙伴參考下。
    2015-04-04
  • 淺談關(guān)于PHP解決圖片無損壓縮的問題

    淺談關(guān)于PHP解決圖片無損壓縮的問題

    本篇文章主要介紹了淺談關(guān)于PHP解決圖片無損壓縮的問題,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • CodeIgniter記錄錯誤日志的方法全面總結(jié)

    CodeIgniter記錄錯誤日志的方法全面總結(jié)

    這篇文章主要介紹了CodeIgniter記錄錯誤日志的方法,詳細分析了CodeIgniter框架的文件結(jié)構(gòu)與相應(yīng)的功能,結(jié)合實例分析了CodeIgniter框架記錄錯誤日志的實現(xiàn)技巧,并分析了隱藏index文件與數(shù)據(jù)傳輸?shù)燃记?總結(jié)非常全面,需要的朋友可以參考下
    2016-05-05
  • PHP XML備份Mysql數(shù)據(jù)庫

    PHP XML備份Mysql數(shù)據(jù)庫

    以下是在Linux下通過Apache+PHP對Mysql數(shù)據(jù)庫的備份的文件代碼
    2009-05-05
  • php 批量查詢搜狗sogou代碼分享

    php 批量查詢搜狗sogou代碼分享

    本文給大家分享的是使用php實現(xiàn)批量查詢搜狗的實例代碼,非常的簡單實用,有需要的小伙伴可以參考下。
    2015-05-05

最新評論