繁体中文
设为首页
加入收藏
当前位置:网络编程首页 >> php >> 生成带IP显示的图片

生成带IP显示的图片

2008-03-19 14:55:10  作者:  来源:互联网  浏览次数:60  文字大小:【】【】【

共4个文件,
index.php,  显示页面
ip.php, IP转化为地址的代码页面
logo.png, 背景图片
QQWry.Dat IP数据库

将4个文件放支持PHP的服务器上某一目录下,调用就行了。

浏览地址:

http://www.meimeier.com/ipshow/index.phpip

index.php 文件

<?php
Header
("Content-type: image/PNG"
);    
$myip=$_SERVER["REMOTE_ADDR"
];
include
"ip.php"
;
$im = @imagecreatefrompng ("logo.png"
);
$black = imagecolorallocate ($im, 0, 0, 0
);
$white = imagecolorallocate ($im, 255, 255, 255
);
$bkg = imagecolorallocate($im, 0,0,135 );
//背景色
$red = imagecolorallocate($im, 128,204,204 );
//红色
$blue = imagecolorallocate($im, 255,255,168 );
//蓝色
$code = new clientGetObj
;
$str1 = $code->getBrowse
();
$str2 = $code->getIP
();
$str4 = ip2location($str2
);
$str3 = $code->getOS
();
$font = '/simsun.ttc'
;
imagestring($im,5,0,18," lixf.net",$red
);
//for ($i = 0; $i < strlen($myip); $i++) { imagestring($im, 2, $i*8+1, 40, substr($myip,$i,1), $blue);     }
ImageTTFText ($im,9,0,20,240,$white,$font,iconv("GB2312","UTF-8",您的IP地址是.$str2
));
ImageTTFText ($im,9,0,20,260,$white,$font,iconv("GB2312","UTF-8",您的真实地址是.$str4
));
ImageTTFText ($im,9,0,20,280,$red,$font,iconv("GB2312","UTF-8",您的操作系统是.$str3
));
ImageTTFText ($im,9,0,20,300,$white,$font,iconv("GB2312","UTF-8",您使用的浏览器是.$str1
));
ImagePNG($im
);    
ImageDestroy($im
);    


    


// 判断用户浏览器系统


class
clientGetObj
{
    function
getBrowse
()
    {
    global
$_SERVER
;
    
$Agent = $_SERVER['HTTP_USER_AGENT'
];
    
$browser = ''
;
    
$browserver = ''
;
    
$Browser = array('Lynx', 'MOSAIC', 'AOL', 'Opera', 'JAVA', 'MacWeb', 'WebExplorer', 'OmniWeb'
);
    for(
$i = 0; $i <= 7; $i
++){
    if(
strpos($Agent, $Browsers[$i
])){
    
$browser = $Browsers[$i
];
    
$browserver = ''
;
    }
    }
    if(
ereg('Mozilla', $Agent) && !ereg('MSIE', $Agent
)){
    
$temp = explode('(', $Agent
);
    
$Part = $temp[0
];
    
$temp = explode('/', $Part
);
    
$browserver = $temp[1
];
    
$temp = explode(' ', $browserver
);
    
$browserver = $temp[0
];
    
$browserver = preg_replace('/([d.]+)/', '\1', $browserver
);
    
$browserver = $browserver
;
    
$browser = 'Netscape Navigator'
;
    }
    if(
ereg('Mozilla', $Agent) && ereg('Opera', $Agent
)) {
    
$temp = explode('(', $Agent
);
    
$Part = $temp[1
];
    
$temp = explode(')', $Part
);
    
$browserver = $temp[1
];
    
$temp = explode(' ', $browserver
);
    
$browserver = $temp[2
];
    
$browserver = preg_replace('/([d.]+)/', '\1', $browserver
);
    
$browserver = $browserver
;
    
$browser = 'Opera'
;
    }
    if(
ereg('Mozilla', $Agent) && ereg('MSIE', $Agent
)){
    
$temp = explode('(', $Agent
);
    
$Part = $temp[1
];
    
$temp = explode(';', $Part
);
    
$Part = $temp[1
];
    
$temp = explode(' ', $Part
);
    
$browserver = $temp[2
];
    
$browserver = preg_replace('/([d.]+)/','\1',$browserver
);
    
$browserver = $browserver
;
    
$browser = 'Internet Explorer'
;
    }
    if(
$browser != ''
){
    
$browseinfo = $browser.' '.$browserver
;
    } else {
    
$browseinfo = false
;
    }
    return
$browseinfo
;
    }


    function
getIP
()
    {
    global
$_SERVER
;
    if (
getenv('HTTP_CLIENT_IP'
)) {
    
$ip = getenv('HTTP_CLIENT_IP'
);
    } else if (
getenv('HTTP_X_FORWARDED_FOR'
)) {
    
$ip = getenv('HTTP_X_FORWARDED_FOR'
);
    } else if (
getenv('REMOTE_ADDR'
)) {
    
$ip = getenv('REMOTE_ADDR'
);
    } else {
    
$ip = $_SERVER['REMOTE_ADDR'
];
    }
    return
$ip
;
    }


    function
getOS
()
    {
    global
$_SERVER
;
    
$agent = $_SERVER['HTTP_USER_AGENT'
];
    
$os = false
;
    if (
eregi('win', $agent) && strpos($agent, '95'
)){
    
$os = 'Windows 95'
;
    }
    else if (
eregi('win 9x', $agent) && strpos($agent, '4.90'
)){
    
$os = 'Windows ME'
;
    }
    else if (
eregi('win', $agent) && ereg('98', $agent
)){
    
$os = 'Windows 98'
;
    }
    else if (
eregi('win', $agent) && eregi('nt 5.1', $agent
)){
    
$os = 'Windows XP'
;
    }
    else if (
eregi('win', $agent) && eregi('nt 5.2', $agent
)){
    
$os = 'Windows 2003'
;
    }
    else if (
eregi('win', $agent) && eregi('nt 5', $agent
)){
    
$os = 'Windows 2000'
;
    }
    else if (
eregi('win', $agent) && eregi('nt', $agent
)){
    
$os = 'Windows NT'
;
    }
    else if (
eregi('win', $agent) && ereg('32', $agent
)){
    
$os = 'Windows 32'
;
    }
    else if (
eregi('linux', $agent
)){
    
$os = 'Linux'
;
    }
    else if (
eregi('unix', $agent
)){
    
$os = 'Unix'
;
    }
    else if (
eregi('sun', $agent) && eregi('os', $agent
)){
    
$os = 'SunOS'
;
    }
    else if (
eregi('ibm', $agent) && eregi('os', $agent
)){
    
$os = 'IBM OS/2'
;
    }
    else if (
eregi('Mac', $agent) && eregi('PC', $agent
)){
    
$os = 'Macintosh'
;
    }
    else if (
eregi('PowerPC', $agent
)){
    
$os = 'PowerPC'
;
    }
    else if (
eregi('AIX', $agent
)){
    
$os = 'AIX'
;
    }
    else if (
eregi('HPUX', $agent
)){
    
$os = 'HPUX'
;
    }
    else if (
eregi('NetBSD', $agent
)){
    
$os = 'NetBSD'
;
    }
    else if (
eregi('BSD', $agent
)){
    
$os = 'BSD'
;
    }
    else if (
ereg('OSF1', $agent
)){
    
$os = 'OSF1'
;
    }
    else if (
ereg('IRIX', $agent
)){
    
$os = 'IRIX'
;
    }
    else if (
eregi('FreeBSD', $agent
)){
    
$os = 'FreeBSD'
;
    }
    else if (
eregi('teleport', $agent
)){
    
$os = 'teleport'
;
    }
    else if (
eregi('flashget', $agent
)){
    
$os = 'flashget'
;
    }
    else if (
eregi('webzip', $agent
)){
    
$os = 'webzip'
;
    }
    else if (
eregi('offline', $agent
)){
    
$os = 'offline'
;
    }
    else {
    
$os = 'Unknown'
;
    }
    return
$os
;
    }
}
?>

ip.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
;
}



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
ip2location ( $ip
)
{
    
$wry = new TQQwry
;
    
$nRet = $wry->qqwry ( $ip
);
    
     return
$wry->Country.$wry->Local
;
}


//调用方法 echo     ip2location($ip);
?>

注: $im = @imagecreatefrompng ("logo.png");
改为
$t
= rand(1,5
);
$im = @imagecreatefrompng ("img/0".$t.".png"
);
//img 目录下的01.png ~ 05.png

责任编辑:探索者


相关文章
 

最新文章

更多

· php教程:mysql的常用语句
· PHP教程:cookie和数组的...
· PHP创建windows服务并自...
· PHP技巧教程:setcookie...
· 可以在读者复制网页内容...
· 高亮显示php代码
· PHP加速器 eaccelerator...
· ffmpeg+mencoder环境搭建...
· ffmpeg的编译大全
· Ffmpeg使用语法

推荐文章

更多

· php教程:mysql的常用语句
· PHP教程:cookie和数组的...
· PHP创建windows服务并自...
· PHP技巧教程:setcookie...
· 可以在读者复制网页内容...
· 高亮显示php代码
· PHP加速器 eaccelerator...
· ffmpeg+mencoder环境搭建...
· ffmpeg的编译大全
· Ffmpeg使用语法

热点文章

更多