牛牛逼逼叉叉
菜单

php源码显ip图片显IP图片签名分析

2014年08月06日,分类《PHP》,作者:
博客捐助

这个东西经常在别人空间或者论坛签名,或者贴吧里常见吧朋友们。

很多人都想做。网上也有源码。

我在这里分享一个我用过的成功过的。

上次有分享过源码 http://www.nnbbxx.net/post-1868.html

点击查看 http://www.nnbbxx.net/html-js-css/dome/

浏览器AGENT可以在我另外两篇文章里看一下

第一篇 http://www.nnbbxx.net/post-20.html

第二篇 http://www.nnbbxx.net/post-327.html

今天来把代码分析一下(分析听起来比较牛掰)嘿嘿

创建画布

1.创建画布函数$img = imagecreatefrompng(‘bg.png’);,在这里是直接用一个背景图片来创建画布。

2.设置颜色$blue = imagecolorallocate($img,0,0,200);

3.输出文字信息imagettftext($img, 12, 0, 30, 100, $blue, “simkai.ttf”, “牛牛逼逼叉叉 http://www.nnbbxx.net”);在这里第一个参数是图像句柄,第二个参数是字号,第三个参数是角度,第四个参数文字起始点的x坐标值,第五个参数是文字起始点的y坐标值,第六个参数是颜色,第七个参数是字体,第八个参数是需要输出的文字

<?php
//创建画布
$img = imagecreatefrompng('bg.png');
//设置颜色
$blue = imagecolorallocate($img,0,0,200);
$red = imagecolorallocate($img,255,0,0);
$black = imagecolorallocate($img,0,0,0);
//输出文字
imagettftext($img, 12, 0, 10, 20, $red, "simkai.ttf", "IP:".$ip."  来自:".$adress);
imagettftext($img, 12, 0, 10, 40, $red, "simkai.ttf", "你的操作系统为:".$system);
imagettftext($img, 12, 0, 10, 60, $red, "simkai.ttf", "你的浏览器为:".$exp[0].$exp[1]);
imagettftext($img, 12, 0, 10, 80, $red, "simkai.ttf", "今天是:".$date);
imagettftext($img, 12, 0, 30, 100, $blue, "simkai.ttf", "牛牛逼逼叉叉 http://www.nnbbxx.net");
//输出图像
header("Content-type:image/png");
imagepng($img);
//销毁图像
imagedestroy($img);
?>

获取用户的系统信息

需要用到的知识点有以下几个:

  1. $_SERVER[‘HTTP_USER_AGENT’]
  2. stripos()
function getSystem(){   
    $sys = $_SERVER['HTTP_USER_AGENT'];   
    if(stripos($sys, "NT 6.1"))
        $os = "Windows 7";   
    elseif(stripos($sys, "NT 6.0"))   
		$os = "Windows Vista";   
    elseif(stripos($sys, "NT 5.1"))   
		$os = "Windows XP";   
    elseif(stripos($sys, "NT 5.2"))   
		$os = "Windows Server 2003";   
    elseif(stripos($sys, "NT 5"))   
		$os = "Windows 2000";   
    elseif(stripos($sys, "NT 4.9"))   
		$os = "Windows ME";   
    elseif(stripos($sys, "NT 4"))   
		$os = "Windows NT 4.0";   
    elseif(stripos($sys, "98"))   
		$os = "Windows 98";   
    elseif(stripos($sys, "95"))   
		$os = "Windows 95";   
    elseif(stripos($sys, "Mac"))   
		$os = "Mac";   
    elseif(stripos($sys, "Linux"))   
		$os = "Linux";   
    elseif(stripos($sys, "Unix"))   
		$os = "Unix";   
    elseif(stripos($sys, "FreeBSD"))   
		$os = "FreeBSD";   
    elseif(stripos($sys, "SunOS"))   
		$os = "SunOS";   
    elseif(stripos($sys, "BeOS"))   
		$os = "BeOS";   
    elseif(stripos($sys, "OS/2"))   
		$os = "OS/2";   
    elseif(stripos($sys, "PC"))   
		$os = "Macintosh";   
    elseif(stripos($sys, "AIX"))   
		$os = "AIX";   
    else  
        $os = "未知操作系统";   
	return $os;   
}  
$system = getSystem();

检测用户的浏览器型号和版本

需要用到的知识点有以下几个:

  • $_SERVER[‘HTTP_USER_AGENT’]

用途:用来检查浏览页面的访问者在用什么操作系统(包括版本号)浏览器(包括版本号)等信息

  • stripos()

用途: stripos() 函数返回字符串在另一个字符串中第一次出现的位置。如果没有找到该字符串,则返回 false。里面可以包含三个参数,第一个参数用于规定被搜索的字符串,第二个参数用于规定要查找的字符,第三个参数用于规定开始搜索的位置。其中前两个参数必需,第三个可选。

  • 正则表达式,在此不说太多。
//分析返回用户网页浏览器名称,返回的数组第一个为浏览器名称,第二个是版本号。
function getBrowser() {
     $sys = $_SERVER['HTTP_USER_AGENT'];  //获取用户代理字符串
     if (stripos($sys, "Firefox/") > 0) {
         preg_match("/Firefox/([^;)]+)+/i", $sys, $b);
         $exp[0] = "火狐浏览器";
         $exp[1] = $b[1];  //获取火狐浏览器的版本号
     } elseif (stripos($sys, "Maxthon") > 0) {
         preg_match("/Maxthon/([d.]+)/", $sys, $aoyou);
         $exp[0] = "傲游浏览器";
         $exp[1] = $aoyou[1];
     } elseif (stripos($sys, "MSIE") > 0) {
         preg_match("/MSIEs+([^;)]+)+/i", $sys, $ie);
         //$exp = "Internet Explorer ".$ie[1];
         $exp[0] = "IE浏览器";
         $exp[1] = $ie[1];  //获取IE的版本号
     } elseif (stripos($sys, "OPR") > 0) {
         preg_match("/OPR/([d.]+)/", $sys, $opera);
         $exp[0] = "Opera浏览器";
         $exp[1] = $opera[1];  //获取opera浏览器版本号,今天下载一个opera浏览器做测试,发现opera竟然也换成谷歌的内核了,囧
    }elseif (stripos($sys, "Chrome") > 0 && stripos($sys, "SE") > 0) {
         $exp[0] = "搜狗浏览器";
         $exp[1] = "";  
    }elseif (stripos($sys, "Chrome") > 0) {
         preg_match("/Chrome/([d.]+)/", $sys, $google);
         $exp[0] = "Chrome浏览器";
         $exp[1] = $google[1];  //获取google chrome的版本号
    }else {
         $exp = "未知浏览器";
         $exp[1] = "";    //其余的浏览器大家可以根据输出的$_SERVER['HTTP_USER_AGENT']信息来自行获取浏览器名称和版本号
     }
     return $exp;
 }
 $exp=getBrowser();
 $browser=$exp[0]

获取用户的IP及所在地信息

1.几个获取IP的变量

$_SERVER[‘REMOTE_ADDR’];//访问端(有可能是用户,有可能是代理的)IP
$_SERVER[‘HTTP_CLIENT_IP’];//代理端的(有可能存在,可伪造)
$_SERVER[‘HTTP_X_FORWARDED_FOR’];//用户是在哪个IP使用的代理(有可能存在,也可以伪造)

2.获取文件信息

fopen(文件名,读写);这个函数的第一个参数文件名可以是一个网址,这样就相当于打开一个网页,此时第二个参数可以设置为“读”即可,因为不需要进行写的操作;
file_get_contents($url);这个函数传入一个网址可以获取整个网页的内容;
preg_match_all(正则表达式,匹配内容,数组);这个函数大家应该很熟悉,通过正则表达式匹配第二个参数中的内容,然后得到的结果返回到第三个参数设置的数组中

//获取用户IP地址
function getIP(){
    if ($HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"]) { 
            $ip = $HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"]; 
        }elseif ($HTTP_SERVER_VARS["HTTP_CLIENT_IP"]) { 
            $ip = $HTTP_SERVER_VARS["HTTP_CLIENT_IP"]; 
        }elseif ($HTTP_SERVER_VARS["REMOTE_ADDR"]) { 
            $ip = $HTTP_SERVER_VARS["REMOTE_ADDR"]; 
        }elseif (getenv("HTTP_X_FORWARDED_FOR")) { 
            $ip = getenv("HTTP_X_FORWARDED_FOR"); 
        }elseif (getenv("HTTP_CLIENT_IP")) { 
            $ip = getenv("HTTP_CLIENT_IP"); 
        }elseif (getenv("REMOTE_ADDR")){ 
            $ip = getenv("REMOTE_ADDR"); 
        } else { 
            $ip = "Unknown"; 
        } 
    return $ip;
}
    $ip=getIP();

//获取地区信息
function getAdress($a){
    $url = "http://ip.chinaz.com/?IP=".$a;
    $fp = @fopen($url, "r") or die("超时");
    $fcontents = file_get_contents($url);
    preg_match_all("/==>> d+ ==>> (.*)</strong><br />
/", $fcontents, $regs);
    return $regs[1][0];
}
    $adress = getAdress($ip);

看完之后最终的演示地址请返回开头部分有看到。

游览器的agent返回前几段也可以看到。



发表评论

电子邮件地址不会被公开。 必填项已用*标注

【上一篇】

CentOS7.0网络设置和域名绑定

【下一篇】

Axure RP Pro6.5 key注册码加汉化非破解