I can catch u..获取用户浏览器,ip,操作系统信息的image
August 27, 2007 – 2:47 am上次朋友惊讶于论坛里面有人用的签名图片可以显示ip地址,操作系统等,我说这个很简单的,给他做了个demo。。用的是珊瑚虫的ip库,然后写了个操作系统判断和浏览器判断,然后利用php 的GD库编辑模版图片输出。。。。下面是个演示:
点此查看演示 (165 hits)
下面是代码:
总共有5个文件,为:
- CoralWry.dat //ip库文件,此处用的是珊瑚虫的ip库
- template.jpg //生成的图片的模版
- simhei.ttf //写入信息的字体,可以自己定义,但是要记得在mysign.php文件中修改
- getip.php //获取ip的物理地址的类
- mysign.php //获取浏览器,操作系统,生成图片
mysign.php
- include("getip.php");
- function browser(){
- global $agent;
- // initialize properties
- $bd['browser'] = "未知浏览器";
- $bd['version'] = "未知版本";
- //$this->UserAgent = $agent;
- // find operating system
- if (eregi("win", $agent)) {
- if(eregi("NT 5.1",$agent)) {
- $bd['platform'] = "Windows XP";
- }
- elseif(eregi("NT 5.0",$agent)) {
- $bd['platform'] = "Windows 2000";
- }
- elseif(eregi("NT 5.2",$agent)) {
- $bd['platform'] = "Windows 2003";
- }
- else
- $bd['platform'] = "Windows";
- }
- elseif (eregi("mac", $agent))
- $bd['platform'] = "MacIntosh";
- elseif (eregi("linux", $agent))
- $bd['platform'] = "Linux";
- elseif (eregi("OS/2", $agent))
- $bd['platform'] = "OS/2";
- elseif (eregi("BeOS", $agent))
- $bd['platform'] = "BeOS";
- // test for Opera
- if (eregi("opera",$agent)){
- $val = stristr($agent, "opera");
- if (eregi("/", $val)){
- $val = explode("/",$val);
- $bd['browser'] = $val[0];
- $val = explode(" ",$val[1]);
- $bd['version'] = $val[0];
- }else{
- $val = explode(" ",stristr($val,"opera"));
- $bd['browser'] = $val[0];
- $bd['version'] = $val[1];
- }
- // test for WebTV
- }elseif(eregi("webtv",$agent)){
- $val = explode("/",stristr($agent,"webtv"));
- $bd['browser'] = $val[0];
- $bd['version'] = $val[1];
- // test for MS Internet Explorer version 1
- }elseif(eregi("microsoft internet explorer", $agent)){
- //$bd['browser'] = "MSIE";
- $bd['browser'] = "microsoft internet explorer";
- $bd['version'] = "1.0";
- $var = stristr($agent, "/");
- if (ereg("308|425|426|474|0b1", $var)){
- $bd['version'] = "1.5";
- }
- // test for NetPositive
- }elseif(eregi("NetPositive", $agent)){
- $val = explode("/",stristr($agent,"NetPositive"));
- $bd['platform'] = "BeOS";
- $bd['browser'] = $val[0];
- $bd['version'] = $val[1];
- // test for MS Internet Explorer
- }elseif(eregi("msie",$agent) && !eregi("opera",$agent)){
- $val = explode(" ",stristr($agent,"msie"));
- //$bd['browser'] = $val[0];
- $bd['browser'] = 'Microsoft Internet Explorer';
- $bd['version'] = $val[1];
- // test for MS Pocket Internet Explorer
- }elseif(eregi("mspie",$agent) || eregi('pocket', $agent)){
- $val = explode(" ",stristr($agent,"mspie"));
- $bd['browser'] = "MSPIE";
- $bd['platform'] = "WindowsCE";
- if (eregi("mspie", $agent))
- $bd['version'] = $val[1];
- else {
- $val = explode("/",$agent);
- $bd['version'] = $val[1];
- }
- // test for Galeon
- }elseif(eregi("galeon",$agent)){
- $val = explode(" ",stristr($agent,"galeon"));
- $val = explode("/",$val[0]);
- $bd['browser'] = $val[0];
- $bd['version'] = $val[1];
- // test for Konqueror
- }elseif(eregi("Konqueror",$agent)){
- $val = explode(" ",stristr($agent,"Konqueror"));
- $val = explode("/",$val[0]);
- $bd['browser'] = $val[0];
- $bd['version'] = $val[1];
- // test for iCab
- }elseif(eregi("icab",$agent)){
- $val = explode(" ",stristr($agent,"icab"));
- $bd['browser'] = $val[0];
- $bd['version'] = $val[1];
- // test for OmniWeb
- }elseif(eregi("omniweb",$agent)){
- $val = explode("/",stristr($agent,"omniweb"));
- $bd['browser'] = $val[0];
- $bd['version'] = $val[1];
- // test for Phoenix
- }elseif(eregi("Phoenix", $agent)){
- $bd['browser'] = "Phoenix";
- $val = explode("/", stristr($agent,"Phoenix/"));
- $bd['version'] = $val[1];
- // test for Firebird
- }elseif(eregi("firebird", $agent)){
- $bd['browser']="Firebird";
- $val = stristr($agent, "Firebird");
- $val = explode("/",$val);
- $bd['version'] = $val[1];
- // test for Firefox
- }elseif(eregi("Firefox", $agent)){
- $bd['browser']="Firefox";
- $val = stristr($agent, "Firefox");
- $val = explode("/",$val);
- $bd['version'] = $val[1];
- // test for Mozilla Alpha/Beta Versions
- }elseif(eregi("mozilla",$agent) &&
- eregi("rv:[0-9].[0-9][a-b]",$agent) && !eregi("netscape",$agent)){
- $bd['browser'] = "Mozilla";
- $val = explode(" ",stristr($agent,"rv:"));
- eregi("rv:[0-9].[0-9][a-b]",$agent,$val);
- $bd['version'] = str_replace("rv:","",$val[0]);
- // test for Mozilla Stable Versions
- }elseif(eregi("mozilla",$agent) &&
- eregi("rv:[0-9]\.[0-9]",$agent) && !eregi("netscape",$agent)){
- $bd['browser'] = "Mozilla";
- $val = explode(" ",stristr($agent,"rv:"));
- eregi("rv:[0-9]\.[0-9]\.[0-9]",$agent,$val);
- $bd['version'] = str_replace("rv:","",$val[0]);
- // test for Lynx & Amaya
- }elseif(eregi("libwww", $agent)){
- if (eregi("amaya", $agent)){
- $val = explode("/",stristr($agent,"amaya"));
- $bd['browser'] = "Amaya";
- $val = explode(" ", $val[1]);
- $bd['version'] = $val[0];
- } else {
- $val = explode("/",$agent);
- $bd['browser'] = "Lynx";
- $bd['version'] = $val[1];
- }
- // test for Safari
- }elseif(eregi("safari", $agent)){
- $bd['browser'] = "Safari";
- $bd['version'] = "";
- // remaining two tests are for Netscape
- }elseif(eregi("netscape",$agent)){
- $val = explode(" ",stristr($agent,"netscape"));
- $val = explode("/",$val[0]);
- $bd['browser'] = $val[0];
- $bd['version'] = $val[1];
- }elseif(eregi("mozilla",$agent) && !eregi("rv:[0-9]\.[0-9]\.[0-9]",$agent)){
- $val = explode(" ",stristr($agent,"mozilla"));
- $val = explode("/",$val[0]);
- $bd['browser'] = "Netscape";
- $bd['version'] = $val[1];
- }
- // clean up extraneous garbage that may be in the name
- //$bd['browser'] = ereg_replace("[^a-z,A-Z]", "", $bd['browser']);
- // clean up extraneous garbage that may be in the version
- $bd['version'] = ereg_replace("[^0-9,.,a-z,A-Z]", "", $bd['version']);
- // finally assign our properties
- return $bd['browser'].$bd['version'];
- }
- function getUserOS() {
- global $agent;
- $os = "未知操作系统";
- if (strpos($agent, 'Win') && strpos($agent, '95')) {
- $os = "Windows 95";
- }
- elseif (strpos($agent,'Win 9') && strpos($agent, '4.90')) {
- $os = "Windows 9";
- }
- elseif (strpos($agent,'Win') && strpos($agent, '98')) {
- $os = "Windows 98";
- }
- elseif (strpos($agent,'Win') && strpos($agent, 'NT 5.0')) {
- $os = "Windows 2000";
- }
- elseif (strpos($agent, 'Win') && strpos($agent, 'NT 5.1')) {
- $os = "Windows XP";
- }
- elseif (strpos($agent, 'Win') && strpos($agent, 'NT 5.2')) {
- $os = "Windows 2003";
- }
- elseif (strpos($agent, 'Win') && strpos($agent, 'NT')) {
- $os = "Windows NT";
- }
- elseif (strpos($agent, 'Win') && strpos($agent, '32')) {
- $os = "Windows 32";
- }
- elseif (strpos($agent, 'Win')) {
- $os = "Windows";
- }
- elseif (strpos($agent, 'Linux')) {
- $os = "LInux";
- }
- elseif (strpos($agent, 'Unix')) {
- $os = "Unix";
- }
- elseif (strpos($agent, 'sun') && strpos($agent, 'OS')) {
- $os = "Sun OS";
- }
- elseif (strpos($agent, 'IBM') && strpos($agent, 'OS')) {
- $os = "IBM";
- }
- elseif (strpos($agent, 'Mac') && strpos($agent, 'PC')) {
- $os = "Mac pc";
- }
- elseif (strpos($agent, 'PowerPC')) {
- $os = "PowerPC";
- }
- elseif (strpos($agent, 'AIX')) {
- $os = "AIX";
- }
- elseif (strpos($agent, 'HPUX')) {
- $os = "HPUX";
- }
- elseif (strpos($agent, 'NetBSD')) {
- $os = "NetBSD";
- }
- elseif (strpos($agent, 'BSD')) {
- $os = "BSD";
- }
- elseif (strpos($agent, 'OSF1')) {
- $os = "OSFI";
- }
- elseif (strpos($agent, 'IRIX')) {
- $os = "IRIX";
- }
- elseif (strpos($agent, 'FreeBSD')) {
- $os = "FreeBSD";
- }
- return $os;
- }
- //获取ip地址
- $agent = $_SERVER['HTTP_USER_AGENT'];
- $ip = $_SERVER["REMOTE_ADDR"];
- $iploca = new IpLocation;
- $iploca->getiplocation($ip);
- $from1 = $iploca->get('country');
- $from2 = $iploca->get('area');
- $from = $from1 . $from2;
- //获取物理地址
- $from1 = iconv("GB2312","UTF-8",$iploca->get('country'));
- $from2 = $iploca->get('area');
- $from = $from1 . $from2;
- //判断浏览器,操作系统
- //$browser = getUserBrowser();
- $browser = browser();
- $os = getUserOS();
- //定义图像输出变量
- $pngFile = "template.jpg";
- $font = "simhei.ttf";
- $font_size = 12;
- $x['os'] = 130;
- $y['os'] = 100;
- $x['browser'] = 140;
- $y['browser'] = 120;
- $x['ip'] = 120;
- $y['ip'] = 140;
- $x['from'] = 120;
- $y['from'] = 165;
- $image = imagecreatefromjpeg($pngFile) or die('不能创建图像');
- $text_color = imagecolorallocate($image, 255, 0, 0) or die('不能创建颜色');
- //写入文字
- imagettftext($image, $font_size, 0, $x['os'], $y['os'], $text_color, $font, $os) or die('没能输出文字');
- imagettftext($image, $font_size, 0, $x['browser'], $y['browser'], $text_color, $font, $browser);
- imagettftext($image, $font_size, 0, $x['ip'], $y['ip'], $text_color, $font, $ip);
- imagettftext($image, $font_size, 0, $x['from'], $y['from'], $text_color, $font, $from);
- header("Content-type: image/jpeg");
- imagejpeg($image,'',80);
- imagedestroy($image);
- ?>
getip.php
- class IpLocation{
- private $fp;
- private $wrydat;
- private $wrydat_version;
- private $ipnumber;
- private $firstip;
- private $lastip;
- private $ip_range_begin;
- private $ip_range_end;
- private $country;
- private $area;
- const REDIRECT_MODE_0 = 0;
- const REDIRECT_MODE_1 = 1;
- const REDIRECT_MODE_2 = 2;
- function __construct(){
- $args = func_get_args();
- $this->wrydat = func_num_args()>0?$args[0]:'CoralWry.dat';
- $this->initialize();
- }
- function __destruct(){
- fclose($this->fp);
- }
- private function initialize(){
- if(file_exists($this->wrydat))
- $this->fp = fopen($this->wrydat,'rb');
- $this->getipnumber();
- $this->getwryversion();
- }
- public function get($str){
- return $this->$str;
- }
- public function set($str,$val){
- $this->$str = $val;
- }
- private function getbyte($length,$offset=null){
- if(!is_null($offset)){
- fseek($this->fp,$offset,SEEK_SET);
- }
- $b = fread($this->fp,$length);
- return $b;
- }
- /**
- * 把IP地址打包成二进制数据,以big endian(高位在前)格式打包
- * 数据存储格式为 little endian(低位在前) 如:
- * 00 28 C6 DA 218.198.40.0 little endian
- * 3F 28 C6 DA 218.198.40.0 little endian
- * 这样的数据无法作二分搜索查找的比较,所以必须先把获得的IP数据使用strrev转换为big endian
- * @param $ip
- * @return big endian格式的二进制数据
- */
- private function packip($ip){
- return pack( "N", intval( ip2long( $ip)));
- }
- private function getlong($length=4, $offset=null){
- $chr=null;
- for($c=0;$length%4!=0&&$c<(4-$length%4);$c++){
- $chr .= chr(0);
- }
- $var = unpack( "Vlong", $this->getbyte($length, $offset).$chr);
- return $var['long'];
- }
- private function getwryversion(){
- $length = preg_match("/coral/i",$this->wrydat)?26:30;
- $this->wrydat_version = $this->getbyte($length, $this->firstip-$length);
- }
- private function getipnumber(){
- $this->firstip = $this->getlong();
- $this->lastip = $this->getlong();
- $this->ipnumber = ($this->lastip-$this->firstip)/<