分類  >  WEB開發 >

有沒有將IPv6化為完整形式的代碼?解決辦法

tags:    時間:2013-12-09 22:19:03
有沒有將IPv6化為完整形式的代碼?
比如能把2001:CC0:2020::轉化為2001:0CC0:2020:0000:0000:0000:0000:0000
------解決方案--------------------

<?php
/* PHP-IPv6 V1.0.
 * Copyright (c) 2010 Mr.Bin <bin_jly@163.com>
 */
class ipv6 {
    function addr($addr=null) {
        // 常規獲取IPv6地址或格式化IP地址為IPv6格式
        !$addr && ($addr = $_SERVER['REMOTE_ADDR']);
        $type = self::type($addr);
        if ( $type === 6 && self::ipv6_check($addr) ) return $addr;
        elseif ( $type === 4 ) return self::ip426($addr);
        else return 'Unknown';
    }
 
    function realip() {
        /* 穿過代理獲取真實IP地址
         * 返回值為數組,array[0]為真實IP,array[1]為代理IP(可能為空)
         * 若array[0]和array[1]相等,則實際真實IP可能無法獲取(高度匿名?)
         */
        $is_proxy = false;
        if ( $_SERVER['HTTP_X_FORWARDED_FOR'] ) {
            $is_proxy = true;
            $ips = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
            foreach($ips as $ip){
                if ( !self::wan_ip($ip) ) $ip = false;
                else break;
            }
        }
        if ( !$ip && $_SERVER['HTTP_CLIENT_IP'] ) {
            $is_proxy = true;
            $ip = $_SERVER['HTTP_CLIENT_IP'];
            if ( !self::wan_ip($ip) ) $ip = false;
        }
        if ( $is_proxy ) {
            $proxy = $_SERVER['REMOTE_ADDR'];
            if (!$ip) $ip = $proxy;
        } else {
            $ip = $_SERVER['REMOTE_ADDR'];
        }
        return explode(',', $ip.','.$proxy);
    }
 
    function cut($addr) {
        // 壓縮IPv6地址
        if (!self::ipv6_check($addr)) return $addr;

推薦閱讀文章

Bookmark the permalink ,來源:互聯網