PHP 使用 GD 库动态生成显示 IP 地址的 GIF 图片
利用 PHP GD 库可以动态生成包含 IP 地址的图片。该方法通过判断 HTTP 头信息获取用户 IP,并在内存中绘制白色背景的 GIF 图像,最终输出给浏览器。
结果与原理
此方法的核心在于使用 GD 扩展在服务器端实时创建图像资源。不同于静态 HTML 页面直接显示文本,这种方式将 IP 地址编码为图形数据流(MIME类型为 image/gif),适合需要防止简单爬取或特定样式展示的场景。
准备条件
- PHP 环境:确保服务器已启用并编译了
gd扩展。可通过 phpinfo() 确认。 - 文件设置:脚本文件的 MIME 类型必须强制声明为图像格式,否则浏览器可能无法正确渲染。
第1步:初始化图像画布与颜色
目的:建立绘图区域并定义背景色。
动作:使用 header("Content-type: image/gif") 通知浏览器接收的是图像数据。调用 imagecreate(130, 15) 创建指定宽高的调色板图像。随后用 ImageColorAllocate 分配白色作为背景底色,对应 RGB (255, 255, 255)。
第2步:获取客户端真实 IP 地址
目的:兼容不同网络环境下的 IP 标识,特别是经过 Nginx、CDN 或负载均衡器的请求。
动作:按优先级读取 Server 变量。
首先检查 $_SERVER['HTTP_CLIENT_IP'],若存在则视为客户端原始 IP;
其次检查 $_SERVER['HTTP_X_FORWARDED_FOR'],用于处理多层代理场景;
最后回退到 $_SERVER['REMOTE_ADDR'],这是最可靠的 TCP 连接来源 IP。
<?php
header("Content-type: image/gif");
// 1. 创建 130x15 像素的图像
$im = imagecreate(130, 15);
// 2. 设置白色背景
$background_color = ImageColorAllocate($im, 255, 255, 255);
// 3. 获取 IP 地址
if(isset($_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
$ip = $_SERVER['REMOTE_ADDR'];
}
// 4. 设置文字颜色 (深蓝色)
$text_color = imagecolorallocate($im, 0, 51, 102);
// 5. 绘制字符串
// 参数说明: 图像资源, 字体大小(1-5), X偏移, Y偏移, 内容, 颜色
imagestring($im, 3, 5, 1, $ip, $text_color);
// 6. 输出 GIF 并释放资源
imagegif($im);
imagedestroy($im);
?>
第3步:绘制文字并输出
目的:将获取到的 IP 字符串渲染到画布上并发送给客户端。
动作:使用 imagecolorallocate($im, 0, 51, 102) 指定文字颜色。调用 imagestring 函数,其中字体大小设为 3(中间档位),坐标 (5, 1) 控制文字位置,避免贴边。最后通过 imagegif($im) 输出图像流,并用 imagedestroy($im) 销毁内存中的图像对象以防泄漏。
完成判断
当你在浏览器访问该 .php 文件时,如果屏幕中央出现一个白底蓝字的矩形条,且显示的文本正是你的当前公网或局域网 IP 地址,即表示成功。右键点击图片可查看图片属性,其 Content-Type 应显示为 image/gif。
简要总结
上述就是利用 PHP GD 库实现图形化显示 IP 地址的详细内容。该方案虽然基础,但清晰展示了图像生成流程及 IP 获取的最佳实践。更多关于 PHP 图像处理与安全防护的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









