PHPは手動ip2longとlong2ipを実装します

PHPは手動ip2longとlong2ipを実装します

    / * * 
     *测试
     * / 
    パブリック 関数testipAction(){
         $ IP = '10 .58.101.175' ;
        エコー ip2long$のIP )。
        エコー「<BR>」エコー $この - > myip2long($のIP )。
        エコー「<BR>」エコー long2ip( '171599279' );
        エコー「<BR>」エコー $この - > mylong2ip( '171599279' );

    
     フロートを@return * | int型|文字列
     * / 
    保護  機能 myip2long($のIP ){
         $ newhex = '' ;
         // 配列に分け腹腔
        $ ipsArrは = 爆発( ''、$のIp ;)
         foreachのを$ ipsArr  AS  $キー => $値){
             // 小数点最大値は255であり、それを超えた場合、プロセスは直接返す
            IF$値 > 255 ){
                 戻り '' ; 
            } 
            // 進数の小数変換
            $ヘクス = dechex$の値が;)
             // 各最大値については、FFの16進数で、最大値は2 255 IPです
            例のIP @:何の塗りつぶし0、1111年は16進数がない場合は1.1.1.1、小数点以下は4369 
            / / 0アップ場合、Hexが小数である16843009、01010101である
            IFSTRLEN$進)<2 ){
                 // 長さが2未満ヘクス場合、自動的に0を埋める、
                $ヘクスを = '0'。$ヘクス; 
            } 
            $ newhex。= $ヘクス; 
        } 
        // 変換10進数に進
        $ intStr = hexdec$ newhexを);
         返す $ intStrを
    } 

    * / *
     *彼のlong2ipを実現
     * @param $ int型
     * @return文字列
     * / 
    保護 機能   mylong2ip($ int型){
         //   4294967295のFFFFFF最大
        $ int型 = $ int型 > 4294967295 4294967295 :? $のInt ;
         //は、16進に変換されます進
        $ヘクス = dechex$ int型);
         // 発生IP 7を回避するために、我々は、手動で0を満たす
        IFSTRLEN$進)<8 ){
             // 長さが0自動充填、8未満である
            $ヘクス =「0 」$六角; 
        } 
        // 2つのずつのグループ化。各グループは、それが除去される場合、最初のビットは、0であるかどうかを確認します。得られた値は、次に、アレイに接続された最後の配列を10進数に変換される。
        ために$ I = 0; 私は$ <8; $ I + = 2 ){
             $のA = SUBSTR$ヘクス$ I、2 );
             $ ippart = SUBSTR$ A、0 ,. 1 )、
             IF$ ippart === '0' ){
                 $のA = SUBSTR$ A、1 ,. 1。); 
            } 
            $ aparr [] =hexdec$ A); 
        } 
        戻り (、 '' $のaparr )。
    }

 

おすすめ

転載: www.cnblogs.com/justdoyou/p/11793334.html