求PHP显IP图片源码
本帖最后由 一跳而过 于 2009-1-20 20:35 编辑RT
只要能显IP就行
望各位JG高人帮下忙 :lol
坐沙发等 :dizzy: <?PHP Echo('IP');?> ;P :'(:'(
PHP简单显IP图片 http://www.phpchina.com/html/97/297-1989.html
刚找的,未经测试. :'(:'(
PHP简单显IP图片
一跳而过 发表于 2009-1-20 20:33 http://www.jgwy.net/images/common/back.gif
那你也没说明啊..
翻了翻硬盘里,印象中曾经有过.找不到了,pm qq999 1000次... 直接用楼主的标题百度一下就行了. 可显IP,显具体地址,显中文图片的源程序~~
这个源码也不全是我的,我是借用一个前辈的代码,就是显中文这段代码!
这个文件存为:jacker.php
<?php
function drawer($image, $string, $x, $y, $color)
{
$fp = fopen("chs16.fon", "r"); //WIN98中,此文件在:c:\windows\command 下
if (feof($fp))
{
fclose($fp);
return 0;
}
// gbk
$strings = preg_split('/((?:[\\x80-\\xFF][\\x40-\\xFF])+)/', $string, -1, PREG_SPLIT_DELIM_CAPTURE);
$isch = false;
for ($p = 0, $count = count($strings); $p < $count; $p ++)
{
if ($isch)
{
$string = $strings[$p];
for ($i = 0, $l = strlen($string) - 1; $i < $l; $i += 2)
{
$qh = ord($string{$i}); // get ascii code
$offset = (94 * ($qh - 0xA0 - 1) + (ord($string{$i + 1}) - 0xA0 - 1)) * 32;
fseek($fp, $offset, SEEK_SET);
$buffer = unpack('n*', fread($fp, 32));
// $buffers[$offset] = $buffer;
for ($yy = 1, $ypos = $y; $yy <= 16; $yy ++, $ypos ++)
{
$bits = $buffer[$yy];
for ($xbit = 32768, $xpos = $x; $xbit > 0; $xbit >>= 1, $xpos ++)
{
if ($bits & $xbit)
{
imagesetpixel($image, $xpos, $ypos, $color);
}
}
}
$x += 16;
}
}
else
{
imagestring($image, 12, $x, $y, $strings[$p], $color);
$x += strlen($strings[$p]) * 9;
}
$isch = !$isch;
}
return 0;
}
?>
下面是读IP文本文件的代码,由于刚学PHP没几天,也是刚接触编程,所以.....
我自己看了,都有好多地方不尽人意,代码可以更简洁一点,希望各位前辈莫见笑,
帮忙指点一下!该文件我存为:ip.php<?
$flag=0;
$ip_detail=explode(".",$_SERVER["REMOTE_ADDR"]);
if ($ip_detail<=61) {
$ip_data_file=61;
}
elseif($ip_detail<=199){
$ip_data_file=199;
}
elseif($ip_detail<=217){
$ip_data_file=217;
}
elseif($ip_detail==218){
$ip_data_file=218;
}
else{
$ip_data_file=255;
}
if (file_exists("ipdata/$ip_data_file.txt")) {
$ip_fdata=fopen("ipdata/$ip_data_file.txt","r");
}
else {
if(!($ip_fdata=fopen("/ipdata/0.txt","r"))) {
die("IP 数据文件错误");
}
}
for ($i=0; $i<=3; $i++) {
$ip_detail[$i]=sprintf("%3d", $ip_detail[$i]);
}
while(!feof($ip_fdata)){
$ip_data=fgets($ip_fdata,200);
$ip_data_detail=substr($ip_data,32,strlen($ip_data)-33); //IP物理地址
$test000=explode(".",substr($ip_data,0,16));
$test001=explode(".",substr($ip_data,16,16));
for($s=0;$s<=3;$s++){
$ip0[$s]=sprintf("%3d",$test000[$s]);
$ip1[$s]=sprintf("%3d",$test001[$s]);
}
if(join(".",$ip_detail)>=join(".",$ip0) and join(".",$ip_detail)<=join(".",$ip1)) {
fclose($ip_fdata);
$flag=1;
break; }
};
if($flag==0){
echo "未知地区"."<BR>".$flag;
}
?>
最后就是读一个图片文件,再在上面写上自己想要写的东西!
这个应该比较简单,网上教程也多!一起贴上来;
我命名为:ip.php<?php
header ("Content-type: image/png"); //http头
require ("jacker.php");
require ("ip.php");
$image = @imagecreatefrompng ("logo.png"); // 载入图片
$black = imagecolorallocate ($image, 0, 0, 0); // 默认黑色背景
$white = imagecolorallocate ($image, 255, 255, 255); // 默认黑色背景
$system=show_system();
$browser=show_browser();
$ip=$_SERVER["REMOTE_ADDR"];
$homepage="http://jacker.uni.cc";
drawer($image,$system,90,360,$white);
drawer($image,$browser,90,378,$white);
drawer($image,$ip,90,396,$white); //输出IP地址
drawer($image,$ip_data_detail,90,414,$white);
drawer($image,$homepage,90,432,$white);
imagepng ($image); // 以png格式输出
// 也可以用imagejpeg($im);
// 或imagegif($im);
// 但后者,如果GD版本高于1.6,就不能用了。
imagedestroy ($image); // 结束,清楚所有占用的内存资源
function show_browser(){
$b = $_SERVER['HTTP_USER_AGENT'];
$ie50 = preg_match("/MSIE 5.0/i", $b);
$ie55 = preg_match("/MSIE 5.5/i", $b);
$ie60 = preg_match("/MSIE 6.0/i", $b);
$opera = preg_match("/opera/i", $b);
if ($ie40 == 1) {
$browser = "MSIE4.0";
} else if ($ie50 == 1) {
$browser = "MSIE5.0";
} else if ($ie55 == 1) {
$browser = "MSIE5.5";
} else if ($ie60 == 1) {
$browser = "MSIE6.0";
} else if ($opera == 1) {
$browser = "Opera";
} else {
$browser = "n/a";
}
return($browser);
}
function show_system(){
$so = $_SERVER['HTTP_USER_AGENT'];
$windowsxp = preg_match("/windows nt 5.1/i", $so);
$windowsxp2 = preg_match("/windows xp/i", $so);
$linux = preg_match("/linux/i", $so);
$windowsme = preg_match("/win 9x 4.90/i", $so);
$windowsme2 = preg_match("/windows me/i", $so);
$windows2k = preg_match("/windows nt 5.0/i", $so);
$windows2kb = preg_match("/windows 2000/i", $so);
$windowsnt = preg_match("/windows nt 3.1/i", $so);
$windowsnt2 = preg_match("/windows nt 3.5.0/i", $so);
$windowsnt3 = preg_match("/windows nt 3.5.1/i", $so);
$windowsnt4 = preg_match("/windows nt 4.0/i", $so);
$windows98 = preg_match("/windows 98/i", $so);
$windows95 = preg_match("/windows 95/i", $so);
if ($windowsxp == 1 or $windowsxp2 == 1) {
$sys = "Win XP";
} else if ($linux == 1) {
$sys = "Linux";
} else if ($windowsme == 1 or $windowsme2 == 1) {
$sys = "Win ME";
} else if ($windows2k == 1 or $windows2kb == 1) {
$sys = "Win 2000";
} else if ($windowsnt == 1 or $windowsnt2 == 1 or $windowsnt3 == 1 or $windowsnt4 == 1) {
$sys = "Win NT";
} else if ($windows98 == 1 and $windowsme != 1) {
$sys = "Win 98--怎么还用瘟酒吧啊";
} else if ($windows95 == 1) {
$sys = "Win 95--系统也太落后了吧";
} else {
$sys = "n/a";
}
return($sys);
}
?>
其中,IP地址我用的是纯情版的,我分成了5个文件来读写,
如果只要国内的IP,体积应该会更小,具体情况具体分析!
以下是一个示例文件:
http://jacker.uni.cc/ip/ip.png
源程序下载地址: 一:http://jacker.uni.cc/ip.rar
源程序下载地址: 二:http://jacker.cun.jp/ip.rar
页:
[1]
2