在 PHP 中,如果你想要通过浏览器显示图片或者生成动态图片(如验证码),你需要借助 header() 函数来设置响应头,从而告诉浏览器返回的是一个图像类型,而不是普通的文本或 HTML 页面。
在这篇文章中,我们将介绍如何使用 PHP 的 header() 函数生成并返回验证码图片。验证码广泛应用于网站注册、登录等场景,用于防止机器人自动提交表单。
生成验证码图片通常需要以下几个步骤:
生成随机验证码字符:验证码的内容可以是数字、字母或数字与字母的组合。
创建图像资源:使用 PHP 的 imagecreate() 或 imagecreatetruecolor() 函数创建一个空白图像。
绘制文字:在图片上绘制验证码字符,通常会使用 imagettftext() 或 imagestring() 函数。
设置响应头:使用 header() 函数告知浏览器图片类型。
输出图片:通过 imagepng()、imagejpeg() 等函数将图片输出到浏览器。
销毁图像资源:使用 imagedestroy() 函数释放图像资源。
以下是一个使用 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);
?>
设置响应头:header("Content-Type: image/png"); 这一行设置了响应头,告诉浏览器返回的内容是 PNG 格式的图片。可以根据需求更改为其他图片格式,比如 JPEG (image/jpeg)。
创建图像资源:imagecreate($width, $height); 创建了一个指定宽度和高度的空白图片,返回一个图像资源。
设置颜色:imagecolorallocate($image, 255, 255, 255); 和 imagecolorallocate($image, 0, 0, 0); 用于定义图像的背景色(白色)和文字颜色(黑色)。
生成随机验证码:substr(str_shuffle($characters), 0, 5); 这行代码会从一个字符集中随机选取 5 个字符作为验证码。
绘制文字:imagestring($image, 5, 30, 10, $captcha_text, $text_color); 负责将生成的验证码文字绘制到图像上。
输出图片:imagepng($image); 将图像输出到浏览器,浏览器会自动显示为一张图片。
销毁图像资源:imagedestroy($image); 用于释放图像资源,避免内存泄漏。
如果在生成验证码时,你需要引用外部资源,如字体、图片等,可能会涉及 URL 地址。在这种情况下,我们可以将 URL 的域名替换成 m66.net,例如: