生成带IP显示的图片 [12.24更新]

Calchas 发表于 2007, January 12, 4:54 PM

 12.24

1、更新无法显示 Opera 浏览器名称和版本问题。
2、更新无法正常显示 FireFox 浏览器名称和版本的问题。
3、更新遨游、世界之窗等基于IE的浏览器没有正确详细显示的问题。

 

共4个文件,
index.php,  显示页面
ip.php, IP转化为地址的代码页面
logo.png, 背景图片
QQWry.Dat IP数据库、 这个不改名字、网上有 showIP.exe 可以直接对这个IP数据库进行升级、纯真IP数据库。

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

浏览地址:

http://lixf.net/ip/index.phpip

index.php 文件

 

PHP代码
  1. <?php    
  2. Header("Content-type: image/PNG");     
  3. $myip=$_SERVER["REMOTE_ADDR"];   
  4. include"ip.php";   
  5. $im = @imagecreatefrompng ("logo.png");   
  6. $black = imagecolorallocate ($im, 0, 0, 0);   
  7. $white = imagecolorallocate ($im, 255, 255, 255);   
  8. $bkg = imagecolorallocate($im, 0,0,135 ); //背景色    
  9. $red = imagecolorallocate($im, 128,204,204 ); //红色    
  10. $blue = imagecolorallocate($im, 255,255,168 ); //蓝色    
  11. $code = new clientGetObj;   
  12. $str1 = $code->getBrowse();   
  13. $str2 = $code->getIP();   
  14. $str4 = ip2location($str2);   
  15. $str3 = $code->getOS();   
  16. $font = '/simsun.ttc';   
  17. imagestring($im,5,0,18," lixf.net",$red);    
  18. //for ($i = 0; $i < strlen($myip); $i++) { imagestring($im, 2, $i*8+1, 40, substr($myip,$i,1), $blue);    }    
  19. ImageTTFText ($im,9,0,20,240,$white,$font,iconv("GB2312","UTF-8","您的IP地址是".$str2));   
  20. ImageTTFText ($im,9,0,20,260,$white,$font,iconv("GB2312","UTF-8","您的真实地址是".$str4));   
  21. ImageTTFText ($im,9,0,20,280,$red,$font,iconv("GB2312","UTF-8","您的操作系统是".$str3));   
  22. ImageTTFText ($im,9,0,20,300,$white,$font,iconv("GB2312","UTF-8","您使用的浏览器是".$str1));   
  23. ImagePNG($im);     
  24. ImageDestroy($im);     
  25.   
  26.   
  27.   
  28. // 判断用户浏览器系统   
  29.   
  30. class clientGetObj   
  31. {   
  32.  function getBrowse()   
  33.  {   
  34.  global $_SERVER;   
  35.  $Agent = $_SERVER['HTTP_USER_AGENT'];   
  36.  $browser = '';   
  37.  $browserver = '';   
  38.  $Browsers = array('Lynx''MOSAIC''AOL''Opera''JAVA''MacWeb''WebExplorer''OmniWeb');   
  39.  for($i = 0; $i <= 7; $i ++){   
  40.  if(strpos($Agent$Browsers[$i])){   
  41.  $browser = $Browsers[$i];   
  42.  $browserver = '';   
  43.  }   
  44.  }   
  45.  if(ereg('Mozilla'$Agent) && !ereg('MSIE'$Agent)){   
  46.  $temp = explode('('$Agent);   
  47.  $Part = $temp[0];   
  48.  $temp = explode('/'$Part);   
  49.  $browserver = $temp[1];   
  50.  $temp = explode(' '$browserver);   
  51.  $browserver = $temp[0];   
  52.  $browserver = preg_replace('/([d.]+)/''\1'$browserver);   
  53.  $browserver = $browserver;   
  54.  $browser = 'Netscape Navigator';   
  55.  }   
  56.  //Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.1.11) Gecko/20071127 (FoxPlus) Firefox/2.0.0.11   
  57.  if(ereg('Mozilla'$Agent) && ereg('Firefox'$Agent)){   
  58.      $temp = explode(')'$Agent);   
  59.      $Part = $temp[2];   
  60.      $temp = explode('/'$Part);   
  61.      $browserver = $temp[1];   
  62.      $browserver = preg_replace('/([d.]+)/''\1'$browserver);   
  63.      $browserver = $browserver;   
  64.      $browser = 'Firefox';   
  65.  }   
  66.  //Opera/9.25 (Windows NT 5.2; U; zh-cn)   
  67.  if(!ereg('Mozilla'$Agent) && ereg('Opera'$Agent)) {   
  68.  $temp = explode('('$Agent);   
  69.  $Part = $temp[0];   
  70.  $temp = explode('/'$Part);   
  71.  $browserver = $temp[1];   
  72.  $browserver = preg_replace('/([d.]+)/''\1'$browserver);   
  73.  $browserver = $browserver;   
  74.  $browser = 'Opera';   
  75.  }   
  76.  //Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322)   
  77.  //Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; TheWorld)   
  78.  //Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; GOSURF; MAXTHON 2.0)   
  79.  if(ereg('Mozilla'$Agent) && ereg('MSIE'$Agent)){   
  80.      $temp = explode('('$Agent);   
  81.      $Part = $temp[1];   
  82.      $temp = explode(';'$Part);   
  83.      $Part = $temp[1];   
  84.      if (count($temp)==6) {   
  85.         $newIE = str_replace(" ","",$temp[5]);   
  86.         $newIE = str_replace(")","",$newIE);   
  87.         $newIE = "[".$newIE."]";   
  88.      }else{   
  89.          $newIE = "";   
  90.      }   
  91.      $temp = explode(' '$Part);   
  92.      $browserver = $temp[2];   
  93.      $browserver = preg_replace('/([d.]+)/','\1',$browserver);   
  94.      $browserver = $browserver;     
  95.     $browser = 'Internet Explorer '.$newIE;   
  96.  }   
  97.  if($browser != ''){   
  98.  $browseinfo = $browser.' '.$browserver;   
  99.  } else {   
  100.  $browseinfo = false;   
  101.  }   
  102.  return $browseinfo;   
  103.  }   
  104.   
  105.  function getIP ()   
  106.  {   
  107.  global $_SERVER;   
  108.  if (getenv('HTTP_CLIENT_IP')) {   
  109.  $ip = getenv('HTTP_CLIENT_IP');   
  110.  } else if (getenv('HTTP_X_FORWARDED_FOR')) {   
  111.  $ip = getenv('HTTP_X_FORWARDED_FOR');   
  112.  } else if (getenv('REMOTE_ADDR')) {   
  113.  $ip = getenv('REMOTE_ADDR');   
  114.  } else {   
  115.  $ip = $_SERVER['REMOTE_ADDR'];   
  116.  }   
  117.  return $ip;   
  118.  }   
  119.   
  120.  function getOS ()   
  121.  {   
  122.  global $_SERVER;   
  123.  $agent = $_SERVER['HTTP_USER_AGENT'];   
  124.  $os = false;   
  125.  if (eregi('win'$agent) && strpos($agent'95')){   
  126.  $os = 'Windows 95';   
  127.  }   
  128.  else if (eregi('win 9x'$agent) && strpos($agent'4.90')){   
  129.  $os = 'Windows ME';   
  130.  }   
  131.  else if (eregi('win'$agent) && ereg('98'$agent)){   
  132.  $os = 'Windows 98';   
  133.  }   
  134.  else if (eregi('win'$agent) && eregi('nt 5.1'$agent)){   
  135.  $os = 'Windows XP';   
  136.  }   
  137.  else if (eregi('win'$agent) && eregi('nt 5.2'$agent)){   
  138.  $os = 'Windows 2003';   
  139.  }   
  140.  else if (eregi('win'$agent) && eregi('nt 5'$agent)){   
  141.  $os = 'Windows 2000';   
  142.  }   
  143.  else if (eregi('win'$agent) && eregi('nt'$agent)){   
  144.  $os = 'Windows NT';   
  145.  }   
  146.  else if (eregi('win'$agent) && ereg('32'$agent)){   
  147.  $os = 'Windows 32';   
  148.  }   
  149.  else if (eregi('linux'$agent)){   
  150.  $os = 'Linux';   
  151.  }   
  152.  else if (eregi('unix'$agent)){   
  153.  $os = 'Unix';   
  154.  }   
  155.  else if (eregi('sun'$agent) && eregi('os'$agent)){   
  156.  $os = 'SunOS';   
  157.  }   
  158.  else if (eregi('ibm'$agent) && eregi('os'$agent)){   
  159.  $os = 'IBM OS/2';   
  160.  }   
  161.  else if (eregi('Mac'$agent) && eregi('PC'$agent)){   
  162.  $os = 'Macintosh';   
  163.  }   
  164.  else if (eregi('PowerPC'$agent)){   
  165.  $os = 'PowerPC';   
  166.  }   
  167.  else if (eregi('AIX'$agent)){   
  168.  $os = 'AIX';   
  169.  }   
  170.  else if (eregi('HPUX'$agent)){   
  171.  $os = 'HPUX';   
  172.  }   
  173.  else if (eregi('NetBSD'$agent)){   
  174.  $os = 'NetBSD';   
  175.  }   
  176.  else if (eregi('BSD'$agent)){   
  177.  $os = 'BSD';   
  178.  }   
  179.  else if (ereg('OSF1'$agent)){   
  180.  $os = 'OSF1';   
  181.  }   
  182.  else if (ereg('IRIX'$agent)){   
  183.  $os = 'IRIX';   
  184.  }   
  185.  else if (eregi('FreeBSD'$agent)){   
  186.  $os = 'FreeBSD';   
  187.  }   
  188.  else if (eregi('teleport'$agent)){   
  189.  $os = 'teleport';   
  190.  }   
  191.  else if (eregi('flashget'$agent)){   
  192.  $os = 'flashget';   
  193.  }   
  194.  else if (eregi('webzip'$agent)){   
  195.  $os = 'webzip';   
  196.  }   
  197.  else if (eregi('offline'$agent)){   
  198.  $os = 'offline';   
  199.  }   
  200.  else {   
  201.  $os = 'Unknown';   
  202.  }   
  203.  return $os;   
  204.  }   
  205. }   
  206. ?>  

ip.php文件

 

PHP代码
  1. <?php   
  2.   
  3. define('QQWRY' , 'CoralWry.dat' ) ;   
  4.   
  5. function IpToInt($Ip) {   
  6.     $array=explode('.',$Ip);   
  7.     $Int=($array[0] * 256*256*256) + ($array[1]*256*256) + ($array[2]*256) + $array[3];   
  8.     return $Int;   
  9. }   
  10.   
  11.   
  12. class TQQwry   
  13. {   
  14.     var $StartIP = 0;   
  15.     var $EndIP   = 0;   
  16.     var $Country = '';   
  17.     var $Local   = '';   
  18.   
  19.     var $CountryFlag = 0; // 标识 Country位置   
  20.                           // 0x01,随后3字节为Country偏移,没有Local   
  21.                           // 0x02,随后3字节为Country偏移,接着是Local   
  22.                           // 其他,Country,Local,Local有类似的压缩。可能多重引用。   
  23.     var $fp;   
  24.   
  25.     var $FirstStartIp = 0;   
  26.     var $LastStartIp = 0;   
  27.     var $EndIpOff = 0 ;   
  28.   
  29.     function getStartIp ( $RecNo ) {   
  30.         $offset = $this->FirstStartIp + $RecNo * 7 ;   
  31.         @fseek ( $this->fp , $offset , SEEK_SET ) ;   
  32.         $buf = fread ( $this->fp , 7 ) ;   
  33.         $this->EndIpOff = ord($buf[4]) + (ord($buf[5])*256) + (ord($buf[6])* 256*256);   
  34.         $this->StartIp = ord($buf[0]) + (ord($buf[1])*256) + (ord($buf[2])*256*256) + (ord($buf[3])*256*256*256);   
  35.         return $this->StartIp ;   
  36.     }   
  37.   
  38.     function getEndIp ( ) {   
  39.         @fseek ( $this->fp , $this->EndIpOff , SEEK_SET ) ;   
  40.         $buf = fread ( $this->fp , 5 ) ;   
  41.         $this->EndIp = ord($buf[0]) + (ord($buf[1])*256) + (ord($buf[2])*256*256) + (ord($buf[3])*256*256*256);   
  42.         $this->CountryFlag = ord ( $buf[4] ) ;   
  43.         return $this->EndIp ;   
  44.     }   
  45.   
  46.     function getCountry ( ) {   
  47.   
  48.         switch ( $this->CountryFlag ) {   
  49.             case 1:   
  50.             case 2:   
  51.                 $this->Country = $this->getFlagStr ( $this->EndIpOff+4) ;   
  52.                 //echo sprintf('EndIpOffset=(%x)',$this->EndIpOff );   
  53.                 $this->Local = ( 1 == $this->CountryFlag )? '' : $this->getFlagStr ( $this->EndIpOff+8);   
  54.                 break ;   
  55.             default :   
  56.                 $this->Country = $this->getFlagStr ($this->EndIpOff+4) ;   
  57.                 $this->Local =   $this->getFlagStr ( ftell ( $this->fp )) ;   
  58.   
  59.         }   
  60.     }   
  61.   
  62.   
  63.     function getFlagStr ( $offset )   
  64.     {   
  65.   
  66.         $flag = 0 ;   
  67.         while ( 1 ){   
  68.             @fseek ( $this->fp , $offset , SEEK_SET ) ;   
  69.             $flag = ord ( fgetc ( $this->fp ) ) ;   
  70.             if ( $flag == 1 || $flag == 2 ) {   
  71.                 $buf = fread ($this->fp , 3 ) ;   
  72.                 if ($flag == 2 ){   
  73.                     $this->CountryFlag = 2 ;   
  74.                     $this->EndIpOff = $offset - 4 ;   
  75.                 }   
  76.                 $offset = ord($buf[0]) + (ord($buf[1])*256) + (ord($buf[2])* 256*256);   
  77.             }else{   
  78.                 break ;   
  79.             }   
  80.   
  81.         }   
  82.         if ( $offset < 12 )   
  83.             return '';   
  84.         @fseek($this->fp , $offset , SEEK_SET ) ;   
  85.         return $this->getStr();   
  86.     }   
  87.     function getStr ( )   
  88.     {   
  89.         $str = '' ;   
  90.         while ( 1 ) {   
  91.             $c = fgetc ( $this->fp ) ;   
  92.             if ( ord ( $c[0] ) == 0  )   
  93.                break ;   
  94.             $str .= $c ;   
  95.         }   
  96.         return $str ;   
  97.     }   
  98.   
  99.   
  100.     function qqwry ($dotip) {   
  101.   
  102.         $nRet;   
  103.         $ip = IpToInt ( $dotip );   
  104.   
  105.         $this->fp= @fopen(QQWRY, "rb");   
  106.         if ($this->fp == NULL) {   
  107.               $szLocal"OpenFileError";   
  108.             return 1;   
  109.   
  110.           }   
  111.           @fseek ( $this->fp , 0 , SEEK_SET ) ;   
  112.         $buf = fread ( $this->fp , 8 ) ;   
  113.         $this->FirstStartIp = ord($buf[0]) + (ord($buf[1])*256) + (ord($buf[2])*256*256) + (ord($buf[3])*256*256*256);   
  114.         $this->LastStartIp  = ord($buf[4]) + (ord($buf[5])*256) + (ord($buf[6])*256*256) + (ord($buf[7])*256*256*256);   
  115.   
  116.         $RecordCountfloor( ( $this->LastStartIp - $this->FirstStartIp ) / 7);   
  117.         if ($RecordCount <= 1){   
  118.             $this->Country = "FileDataError";   
  119.             fclose ( $this->fp ) ;   
  120.             return 2 ;   
  121.         }   
  122.   
  123.           $RangB= 0;   
  124.         $RangE$RecordCount;   
  125.         // Match ...   
  126.         while ($RangB < $RangE-1)   
  127.         {   
  128.           $RecNofloor(($RangB + $RangE) / 2);   
  129.           $this->getStartIp ( $RecNo ) ;   
  130.   
  131.             if ( $ip == $this->StartIp )   
  132.             {   
  133.                 $RangB = $RecNo ;   
  134.                 break ;   
  135.             }   
  136.           if ( $ip > $this->StartIp)   
  137.             $RangB$RecNo;   
  138.           else  
  139.             $RangE$RecNo;   
  140.         }   
  141.         $this->getStartIp ( $RangB ) ;   
  142.         $this->getEndIp ( ) ;   
  143.   
  144.         if ( ( $this->StartIp  <= $ip ) && ( $this->EndIp >= $ip ) ){   
  145.             $nRet = 0 ;   
  146.             $this->getCountry ( ) ;   
  147.                         //这样不太好..............所以..........   
  148.             $this->Local = str_replace("(我们一定要解放台湾!!!)"""$this->Local);   
  149.   
  150.         }else {   
  151.             $nRet = 3 ;   
  152.             $this->Country = '未知' ;   
  153.             $this->Local = '' ;   
  154.         }   
  155.         fclose ( $this->fp ) ;   
  156.         return $nRet ;   
  157.     }   
  158. }   
  159.   
  160.   
  161. function ip2location ( $ip )   
  162. {   
  163.     $wry = new TQQwry ;   
  164.     $nRet = $wry->qqwry ( $ip );   
  165.        
  166.   return $wry->Country.$wry->Local ;   
  167. }   
  168.   
  169. //调用方法 echo  ip2location($ip);   
  170. ?>  

« 上一篇 | 下一篇 »

标签: php
相关文章: (最多只显示5条记)
PHP 分页代码 (浏览:3795, 评论:0)
PHP读MSSQL日期问题 (浏览:4456, 评论:1)
Undefined index 错误 (浏览:3944, 评论:0)
php5 无法连接 mssql2005 (浏览:4800, 评论:1)
引用: 点击获得Trackback地址,Encode: UTF-8 点击获得Trackback地址,Encode: GB2312 or GBK 点击获得Trackback地址,Encode: BIG5
» 我要发表评论 ...    访客评论: (8条记录)
  1. 1 Calchas :
    2007, January 15, 11:08 AM   引用此文发表评论
    $im = @imagecreatefrompng ("logo.png");
    改为
    $t = rand(1,5);
    $im = @imagecreatefrompng ("img/0".$t.".png");
    //img 目录下的01.png ~ 05.png
  2. 2 性感美女 :
    2007, August 22, 12:41 PM   引用此文发表评论
    这个太有用了。非常感谢啊。
  3. 3 12 :
    2008, March 22, 5:58 PM   引用此文发表评论
    <b>Warning</b>:  imagecolorallocate(): supplied argument is not a valid Image resource in <b>D:\wwwroot\aacde\wwwroot\ipshow\index.php</b> on line <b>8</b><br />

    出错
  4. 4 Calchas :
    2008, March 24, 10:16 AM   引用此文发表评论
    楼上你的图片位置不对,或者没有。
  5. 5 Lin.X :
    2008, June 7, 9:35 PM   引用此文发表评论
    ip2long()函数可以直接把IP转为长整形
  6. 6 Lin.X :
    2008, June 7, 9:36 PM   引用此文发表评论
    ip2long()可以直接把IP转为长整形
  7. 7 Lin.X :
    2008, June 7, 9:38 PM   引用此文发表评论
    不好意思,第一遍页面没有提示发送成功,所以又发了一遍 : )
  8. 8 迎客堂 :
    2010, May 28, 6:19 PM   引用此文发表评论
    正好用到,收藏了~~ 谢谢~~
 
发表评论:( 你的参与是我最大的动力! )