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

php IP轉換整形(ip2long)的詳解

 更新時間:2013年06月06日 09:46:25   作者:  
本篇文章是對php中IP轉換整形(ip2long)進行了詳細的分析介紹,需要的朋友參考下

如何將四個字段以點分開的IP網絡址協(xié)議地址轉換成整數(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轉化成整數(shù)后,是負的,這是因為得到的結果是有符號整型,最大值是2147483647.要把它轉化為無符號的,可以用
sprintf("%u",ip2long($ip);

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

復制代碼 代碼如下:

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

將輸出true和false

把ip數(shù)據(jù)保存在數(shù)據(jù)庫(MySQL)中時候,我們習慣用ip2long函數(shù)生成整型,然后存放在一個int(11)類型的字段中,但是,在不同的系統(tǒng)平臺上,ip2long函數(shù)得到的值是不同的,因此可能造成在從數(shù)據(jù)庫中讀出數(shù)據(jù),用long2ip得到ip的時候產生錯誤,說一下我們碰到的情況:
我們用一個int(11)類型(范圍-2147483648 -2147483647)來保存把一個ip地址用ip2long處理得到的結果,例如ip是'202.105.77.179′,那么在32位機器上得到的結果是:-899068493,而在64位機器上卻得到3395898803.然后把它寫入數(shù)據(jù)庫,由于超過int(11)的范圍,因此64位機器上的結果被保存為int(11)的最大值:2147483647.于是在從數(shù)據(jù)庫中取出的時候,便得到了錯誤的結果,會得到”127.255.255.255″這個ip地址.
解決的辦法很多,比如可以用mysql的函數(shù):INET_ATON和INET_NTOA來處理ip地址;或者把保存ip地址的字段改為bigint類型,這樣在64位機器上雖然保存的是3395898803,使用long2ip函數(shù)仍能得到正確的結果.

相關文章

  • php 設計模式之 工廠模式

    php 設計模式之 工廠模式

    用工廠模式設計數(shù)據(jù)庫操作類,本程序要運行在PHP5.0以上,使用本程序可以方便的更換數(shù)據(jù)庫,并且可擴展到其它數(shù)據(jù)庫平臺;在換數(shù)據(jù)庫平臺時,只是簡單的修改數(shù)據(jù)庫類型就可以了。
    2008-12-12
  • 關于頁面優(yōu)化和偽靜態(tài)

    關于頁面優(yōu)化和偽靜態(tài)

    頁面優(yōu)化和偽靜態(tài)的說明。
    2009-10-10
  • PHP+iframe模擬Ajax上傳文件功能示例

    PHP+iframe模擬Ajax上傳文件功能示例

    這篇文章主要介紹了PHP+iframe模擬Ajax上傳文件功能,結合實例形式分析了iframe模擬Ajax上傳文件與后臺php接收處理相關操作技巧,需要的朋友可以參考下
    2019-07-07
  • PHP采用XML-RPC構造Web Service實例教程

    PHP采用XML-RPC構造Web Service實例教程

    這篇文章主要介紹了PHP采用XML-RPC構造Web Service,需要的朋友可以參考下
    2014-07-07
  • Could not load type System.ServiceModel.Activation.HttpModule解決辦法

    Could not load type System.ServiceModel.Activation.HttpModul

    本文章來詳細介紹關于Could not load type System.ServiceModel.Activation.HttpModule from assembly System.ServiceModel解決辦法,有需要的朋友可參考
    2012-12-12
  • php簡單定時執(zhí)行任務的實現(xiàn)方法

    php簡單定時執(zhí)行任務的實現(xiàn)方法

    這篇文章主要介紹了php簡單定時執(zhí)行任務的實現(xiàn)方法,涉及curl及sleep等操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02
  • 批量修改RAR文件注釋的php代碼

    批量修改RAR文件注釋的php代碼

    下面的代碼就是我通過我的數(shù)據(jù)庫讀取出文件路徑并最終實現(xiàn)批量修改RAR文件注釋的方法.因為數(shù)據(jù)庫是ACCESS,我新建了一個ODBC源.同時RAR.exe及CMD.EXE都在1.PHP同目錄下
    2010-11-11
  • PHP Stream_*系列函數(shù)

    PHP Stream_*系列函數(shù)

    流(stream)是一種數(shù)據(jù)抽象。使用流包裝數(shù)據(jù)源后,數(shù)據(jù)都將會獲得統(tǒng)一的操作,不管數(shù)據(jù)源是文件、網絡連接、壓縮數(shù)據(jù)中的哪一種。PHP中的stream_*系列函數(shù)就是用來獲取、管理流的一組函數(shù)。
    2010-08-08
  • PHP通過iconv將字符串從GBK轉換為UTF8字符集

    PHP通過iconv將字符串從GBK轉換為UTF8字符集

    PHP通過iconv將字符串從GBK轉換為UTF8字符集的方法,需要的朋友可以參考下。
    2011-07-07
  • PHP及Zend Engine的線程安全模型分析

    PHP及Zend Engine的線程安全模型分析

    在閱讀PHP源碼和學習PHP擴展開發(fā)的過程中,我接觸到大量含有“TSRM”字眼的宏。通過查閱資料,知道這些宏與Zend的線程安全機制有關,而絕大多數(shù)資料中都建議按照既定規(guī)則使用這些宏就可以,而沒有說明這些宏的具體作用
    2011-11-11

最新評論