PHP 使用 GD 库动态生成显示 IP 地址的 GIF 图片

Nora
Nora
发布时间:2026-10-14 | 4人浏览过
原创

利用 PHP GD 库可以动态生成包含 IP 地址的图片。该方法通过判断 HTTP 头信息获取用户 IP,并在内存中绘制白色背景的 GIF 图像,最终输出给浏览器。

结果与原理

此方法的核心在于使用 GD 扩展在服务器端实时创建图像资源。不同于静态 HTML 页面直接显示文本,这种方式将 IP 地址编码为图形数据流(MIME类型为 image/gif),适合需要防止简单爬取或特定样式展示的场景。

准备条件

  1. PHP 环境:确保服务器已启用并编译了 gd 扩展。可通过 phpinfo() 确认。
  2. 文件设置:脚本文件的 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 图像处理与安全防护的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表