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

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

本帖由 muyufan2006-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 ;

        function 
    getStartIp $RecNo ) {
            
    $offset $this->FirstStartIp $RecNo ;
            @
    fseek $this->fp $offset SEEK_SET ) ;
            
    $buf fread $this->fp ) ;
            
    $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 ) ;
            
    $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 = ( == $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 ;
            while ( 
    ){
                @
    fseek $this->fp $offset SEEK_SET ) ;
                
    $flag ord fgetc $this->fp ) ) ;
                if ( 
    $flag == || $flag == ) {
                    
    $buf fread ($this->fp ) ;
                    if (
    $flag == ){
                        
    $this->CountryFlag ;
                        
    $this->EndIpOff $offset ;
                    }
                    
    $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 ( 
    ) {
                
    $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 SEEK_SET ) ;
            
    $buf fread $this->fp ) ;
            
    $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);

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

              
    $RangB0;
            
    $RangE$RecordCount;
            
    // Match ...
            
    while ($RangB $RangE-1)
            {
              
    $RecNofloor(($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 ;
                
    $this->getCountry ( ) ;
                            
    //这样不太好..............所以..........
                
    $this->Local str_replace("(我们一定要解放台湾!!!)"""$this->Local);

            }else {
                
    $nRet ;
                
    $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
    那是相当的强啊