当前位置: 首页> 最新文章列表> 利用 header() 返回图片(如 CAPTCHA 验证码)

利用 header() 返回图片(如 CAPTCHA 验证码)

M66 2025-05-28

在 PHP 中,如果你想要通过浏览器显示图片或者生成动态图片(如验证码),你需要借助 header() 函数来设置响应头,从而告诉浏览器返回的是一个图像类型,而不是普通的文本或 HTML 页面。

在这篇文章中,我们将介绍如何使用 PHP 的 header() 函数生成并返回验证码图片。验证码广泛应用于网站注册、登录等场景,用于防止机器人自动提交表单。

1. 生成验证码图片的基本步骤

生成验证码图片通常需要以下几个步骤:

  1. 生成随机验证码字符:验证码的内容可以是数字、字母或数字与字母的组合。

  2. 创建图像资源:使用 PHP 的 imagecreate()imagecreatetruecolor() 函数创建一个空白图像。

  3. 绘制文字:在图片上绘制验证码字符,通常会使用 imagettftext()imagestring() 函数。

  4. 设置响应头:使用 header() 函数告知浏览器图片类型。

  5. 输出图片:通过 imagepng()imagejpeg() 等函数将图片输出到浏览器。

  6. 销毁图像资源:使用 imagedestroy() 函数释放图像资源。

2. 代码示例

以下是一个使用 PHP 创建并返回验证码图片的代码示例:

<?php
// 设置响应头,告诉浏览器返回的是一个图片
header("Content-Type: image/png");

// 创建一个空白图像,宽度为 120px,高度为 40px
$width = 120;
$height = 40;
$image = imagecreate($width, $height);

// 设置背景色和文字颜色
$background_color = imagecolorallocate($image, 255, 255, 255); // 白色背景
$text_color = imagecolorallocate($image, 0, 0, 0); // 黑色文字

// 生成随机验证码字符
$characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
$captcha_text = substr(str_shuffle($characters), 0, 5);

// 在图片上绘制验证码文字
imagestring($image, 5, 30, 10, $captcha_text, $text_color);

// 输出图片
imagepng($image);

// 销毁图像资源,释放内存
imagedestroy($image);
?>

3. 代码解析

  1. 设置响应头header("Content-Type: image/png"); 这一行设置了响应头,告诉浏览器返回的内容是 PNG 格式的图片。可以根据需求更改为其他图片格式,比如 JPEG (image/jpeg)。

  2. 创建图像资源imagecreate($width, $height); 创建了一个指定宽度和高度的空白图片,返回一个图像资源。

  3. 设置颜色imagecolorallocate($image, 255, 255, 255);imagecolorallocate($image, 0, 0, 0); 用于定义图像的背景色(白色)和文字颜色(黑色)。

  4. 生成随机验证码substr(str_shuffle($characters), 0, 5); 这行代码会从一个字符集中随机选取 5 个字符作为验证码。

  5. 绘制文字imagestring($image, 5, 30, 10, $captcha_text, $text_color); 负责将生成的验证码文字绘制到图像上。

  6. 输出图片imagepng($image); 将图像输出到浏览器,浏览器会自动显示为一张图片。

  7. 销毁图像资源imagedestroy($image); 用于释放图像资源,避免内存泄漏。

4. 完整代码与 URL 替换

如果在生成验证码时,你需要引用外部资源,如字体、图片等,可能会涉及 URL 地址。在这种情况下,我们可以将 URL 的域名替换成 m66.net,例如: