1. 论坛系统升级为Xenforo,欢迎大家测试!
    排除公告

可以把ip.chinahtml.com/index.php这个文件给我学习一下吗?

本帖由 muyufan 于 2006-04-23 发布。版面名称:前端开发

  1. muyufan

    muyufan New Member

    注册:
    2006-01-09
    帖子:
    91
    赞:
    1
    我是个php新手

    再自己的blog后台调用了你们的查询结果来看 访问我blog的ip地址

    现在我想学习一下

    那个php文件怎么写的?用的什么版的ip库?怎么查之类的

    能发给我一份吗 谢谢了
     

    附件文件:

  2. A君

    A君 Well-Known Member

    注册:
    2005-08-31
    帖子:
    19,987
    赞:
    98
    很好吗?
     
  3. muyufan

    muyufan New Member

    注册:
    2006-01-09
    帖子:
    91
    赞:
    1
    我好笨 想学上网找啊

    已经找到一个php版的了


    学习ing
     
  4. muyufan

    muyufan New Member

    注册:
    2006-01-09
    帖子:
    91
    赞:
    1
    PHP:
     
       当前是:全文显示 
     

    <?php

    define
    ('QQWRY' , $qqwry_root_path . 'QQWry.dat' ) ;

    function 
    IpToInt($Ip) {
        
    $array=explode('.',$Ip);
        
    $Int=($array[0] * 256*256*256) + ($array[1]*256*256) + ($array[2]*256) + $array[3];
        return 
    $Int;
    }

    function 
    IntToIp($Int) {
        
    $b1=($Int & 0xff000000)>>24;
        if (
    $b1<0) $b1+=0x100;
        
    $b2=($Int & 0x00ff0000)>>16;
        if (
    $b2<0) $b2+=0x100;
        
    $b3=($Int & 0x0000ff00)>>8;
        if (
    $b3<0) $b3+=0x100;
        
    $b4= $Int & 0x000000ff;
        if (
    $b4<0) $b4+=0x100;
        
    $Ip=$b1.'.'.$b2.'.'.$b3.'.'.$b4;
        return 
    $Ip;
    }


    class 
    TQQwry
    {
        var 
    $StartIP = 0;
        var 
    $EndIP   = 0;
        var 
    $Country = '';
        var 
    $Local   = '';

        var 
    $CountryFlag = 0; // 标识 Country位置
                              // 0x01,随后3字节为Country偏移,没有Local
                              // 0x02,随后3字节为Country偏移,接着是Local
                              // 其他,Country,Local,Local有类似的压缩。可能多重引用。
        
    var $fp;

        var 
    $FirstStartIp = 0;
        var 
    $LastStartIp = 0;
        var 
    $EndIpOff = 0 ;

        function 
    getStartIp ( $RecNo ) {
            
    $offset = $this->FirstStartIp + $RecNo * 7 ;
            @
    fseek ( $this->fp , $offset , SEEK_SET ) ;
            
    $buf = fread ( $this->fp , 7 ) ;
            
    $this->EndIpOff = ord($buf[4]) + (ord($buf[5])*256) + (ord($buf[6])* 256*256);
            
    $this->StartIp = ord($buf[0]) + (ord($buf[1])*256) + (ord($buf[2])*256*256) + (ord($buf[3])*256*256*256);
            return 
    $this->StartIp ;
        }

        function 
    getEndIp ( ) {
            @
    fseek ( $this->fp , $this->EndIpOff , SEEK_SET ) ;
            
    $buf = fread ( $this->fp , 5 ) ;
            
    $this->EndIp = ord($buf[0]) + (ord($buf[1])*256) + (ord($buf[2])*256*256) + (ord($buf[3])*256*256*256);
            
    $this->CountryFlag = ord ( $buf[4] ) ;
            return 
    $this->EndIp ;
        }

        function 
    getCountry ( ) {

            switch ( 
    $this->CountryFlag ) {
                case 
    1:
                case 
    2:
                    
    $this->Country = $this->getFlagStr ( $this->EndIpOff+4) ;
                    
    //echo sprintf('EndIpOffset=(%x)',$this->EndIpOff );
                    
    $this->Local = ( 1 == $this->CountryFlag )? '' : $this->getFlagStr ( $this->EndIpOff+8);
                    break ;
                default :
                    
    $this->Country = $this->getFlagStr ($this->EndIpOff+4) ;
                    
    $this->Local =   $this->getFlagStr ( ftell ( $this->fp )) ;

            }
        }


        function 
    getFlagStr ( $offset )
        {

            
    $flag = 0 ;
            while ( 
    1 ){
                @
    fseek ( $this->fp , $offset , SEEK_SET ) ;
                
    $flag = ord ( fgetc ( $this->fp ) ) ;
                if ( 
    $flag == 1 || $flag == 2 ) {
                    
    $buf = fread ($this->fp , 3 ) ;
                    if (
    $flag == 2 ){
                        
    $this->CountryFlag = 2 ;
                        
    $this->EndIpOff = $offset - 4 ;
                    }
                    
    $offset = ord($buf[0]) + (ord($buf[1])*256) + (ord($buf[2])* 256*256);
                }else{
                    break ;
                }

            }
            if ( 
    $offset < 12 )
                return 
    '';
            @
    fseek($this->fp , $offset , SEEK_SET ) ;
            return 
    $this->getStr();
        }
        function 
    getStr ( )
        {
            
    $str = '' ;
            while ( 
    1 ) {
                
    $c = fgetc ( $this->fp ) ;
                if ( 
    ord ( $c[0] ) == 0  )
                   break ;
                
    $str .= $c ;
            }
            return 
    $str ;
        }


        function 
    qqwry ($dotip) {

            
    $nRet;
            
    $ip = IpToInt ( $dotip );

            
    $this->fp= @fopen(QQWRY, "rb");
            if (
    $this->fp == NULL) {
                  
    $szLocal= "OpenFileError";
                return 
    1;

              }
              @
    fseek ( $this->fp , 0 , SEEK_SET ) ;
            
    $buf = fread ( $this->fp , 8 ) ;
            
    $this->FirstStartIp = ord($buf[0]) + (ord($buf[1])*256) + (ord($buf[2])*256*256) + (ord($buf[3])*256*256*256);
            
    $this->LastStartIp  = ord($buf[4]) + (ord($buf[5])*256) + (ord($buf[6])*256*256) + (ord($buf[7])*256*256*256);

            
    $RecordCount= floor( ( $this->LastStartIp - $this->FirstStartIp ) / 7);
            if (
    $RecordCount <= 1){
                
    $this->Country = "FileDataError";
                
    fclose ( $this->fp ) ;
                return 
    2 ;
            }

              
    $RangB= 0;
            
    $RangE= $RecordCount;
            
    // Match ...
            
    while ($RangB < $RangE-1)
            {
              
    $RecNo= floor(($RangB + $RangE) / 2);
              
    $this->getStartIp ( $RecNo ) ;

                if ( 
    $ip == $this->StartIp )
                {
                    
    $RangB = $RecNo ;
                    break ;
                }
              if ( 
    $ip > $this->StartIp)
                
    $RangB= $RecNo;
              else
                
    $RangE= $RecNo;
            }
            
    $this->getStartIp ( $RangB ) ;
            
    $this->getEndIp ( ) ;

            if ( ( 
    $this->StartIp  <= $ip ) && ( $this->EndIp >= $ip ) ){
                
    $nRet = 0 ;
                
    $this->getCountry ( ) ;
                            
    //这样不太好..............所以..........
                
    $this->Local = str_replace("(我们一定要解放台湾!!!)", "", $this->Local);

            }else {
                
    $nRet = 3 ;
                
    $this->Country = '未知' ;
                
    $this->Local = '' ;
            }
            
    fclose ( $this->fp ) ;
            return 
    $nRet ;
        }
    }

    function 
    GetRealClientIP()
    {
            if( 
    getenv("HTTP_CLIENT_IP") ) 
            {
                    
    $ip_real                = getenv("HTTP_CLIENT_IP") ;
            } 
            else if( 
    getenv("HTTP_X_FORWARDED_FOR") ) 
            {
                    
    $ip_real                = getenv("HTTP_X_FORWARDED_FOR") ;
            } 
            else
            {
                    
    $ip_real                = getenv("REMOTE_ADDR") ;
            }
            return 
    $ip_real ;
    }

    function 
    ip2location ( $ip )
    {
        
    $wry = new TQQwry ;
        
    $nRet = $wry->qqwry ( $ip );
        
      return 
    $wry->Country.$wry->Local ;
    }
    //$ip = $getip;

    ?>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>IP 地址查询:</title>
    <style type="text/css">
    body, input, td{font: 12px Verdana}
    .btn{font: 11px Tahoma;        text-decoration:none;}
    </style>
    <script type="text/javascript" language="JavaScript">
    function copyText(obj)
    {
            obj = document.getElementById(obj);
            var rng = document.body.createTextRange();
            rng.moveToElementText(obj);        
            rng.scrollIntoView();
            rng.select();
            rng.execCommand("Copy");        
            rng.collapse(false);
    }
    </script>
    </head>
    <body style="margin:20px 20px 20px 20px" onLoad="f.s.focus()">
    <h3>IP Service</h3>
    <p>
    <?
    $ip_addr = "";
    if ( IsSet($_REQUEST['s']) )
    {
            $ip_addr = $_REQUEST['s'];
    }
    else
    {
            $ip_addr = GetRealClientIP();
    }
    if ( preg_match("/[a-zA-Z\-_]+/si", $ip_addr) )
    {
            $ip_addr = gethostbyname($ip_addr);
    }

    //echo str_replace("CZ88.NET","",ip2location($ip_addr));

    ?>
    <form action="" method="post" id="f">
    Enter a domain name or IP number:<br><br>
    <input name="s" size="40">
    <input type="submit">
    </form>
    <table>
    <tr>
    <td>IP<? if(!IsSet($_REQUEST['s'])) echo "(您的)"  ?>: </td>
    <td height="30"><div id="ip_addr" style="color:#0000FF"><? echo $ip_addr; ?></div> </td>
    <td width="10"></td>
    <td>[<a href="#" onClick="copyText('ip_addr'); return false;" class="btn">Copy to clipboard</a>]</td>
    </tr>
    <tr>
    <td>位置: </td>
    <td><div id="ip_pos" style="color:#FF0000"><b><? echo str_replace("CZ88.NET","",ip2location($ip_addr)); ?></b></div> </td>
    <td width="10"></td>
    <td>[<a href="#" onClick="copyText('ip_pos'); return false;" class="btn">Copy to clipboard</a>]</td>
    </tr>
    </table>
    </body>
    </html>

    下个QQ数据,在这里指定位置define('QQWRY' , $qqwry_root_path . 'QQWry.dat' ) ;
    就可以用了 



     
  5. 小叶

    小叶 New Member

    注册:
    2005-09-04
    帖子:
    17,941
    赞:
    33
    楼上的很强哦。。
     
  6. 相当

    相当 New Member

    注册:
    2006-03-28
    帖子:
    9,431
    赞:
    42
    那是相当的强啊