网页验证码需用PHP生成后端逻辑并由服务器执行输出图片或JSON,分三步:1. 编写captcha.php生成随机码、绘图并存入session;2. HTML中用img标签调用该脚本,支持点击刷新;3. 提交时在process.php中校验session中的验证码值。

在网页中生成验证码,关键不是“加PHP标签”,而是用 PHP 编写后端逻辑生成验证码图像或数据,并通过 HTML/JS 前端调用它。PHP 本身不能直接“加在 HTML 页面里”就显示验证码——它需要服务器执行、输出图片(如 PNG)或 JSON 数据。
下面分三步说明怎么做:
1. 创建一个独立的 PHP 验证码生成脚本(比如 `captcha.php`)
这个文件负责生成随机字符串、画图、设置 session,并输出图片流:
<?php
session_start();
// 生成4位随机数字+字母
$code = '';
$chars = '23456789ABCDEFGHJKLMNPQRSTUVWXYZ';
for ($i = 0; $i < 4; $i++) {
$code .= $chars[rand(0, strlen($chars)-1)];
}
$_SESSION['captcha_code'] = $code;
// 创建图像(120x40)
$im = imagecreatetruecolor(120, 40);
$bg = imagecolorallocate($im, 240, 240, 240);
$text_color = imagecolorallocate($im, 80, 80, 80);
imagefilledrectangle($im, 0, 0, 120, 40, $bg);
// 添加干扰点和线(可选,防识别)
for ($i = 0; $i < 50; $i++) {
imagesetpixel($im, rand(0,120), rand(0,40), imagecolorallocate($im, 200,200,200));
}
for ($i = 0; $i < 3; $i++) {
imageline($im, rand(0,120), rand(0,40), rand(0,120), rand(0,40), imagecolorallocate($im, 180,180,180));
}
// 写入文字(带轻微旋转)
for ($i = 0; $i < 4; $i++) {
$angle = rand(-15, 15);
imagettftext($im, 16, $angle, 25 + $i*22, 30, $text_color, './arial.ttf', $code[$i]);
}
// 输出 PNG 图片头并输出图像
header('Content-Type: image/png');
imagepng($im);
imagedestroy($im);
?>⚠️ 注意:需确保服务器支持 GD 库,且 arial.ttf 字体文件放在同目录(或改用系统字体路径)。
立即学习“PHP免费学习笔记(深入)”;
2. 在 HTML 表单中嵌入验证码图片
用 `` 标签指向上面的 `captcha.php`,并加时间戳防止缓存:
<form method="post">
用户名:<input type="text" name="username"><br>
验证码:<input type="text" name="captcha" maxlength="4">
<img src="captcha.php?<?php echo time(); ?>"
alt="验证码"
onclick="this.src='captcha.php?'+Math.random()"
style="cursor:pointer;">
<br>
<input type="submit" value="提交">
</form>✅ 点击图片可刷新验证码(靠 onclick 和 Math.random() 强制重载)。
3. 提交时在 PHP 后端校验用户输入
比如 `process.php` 中检查是否匹配 session 中保存的值:
<?php
session_start();
if ($_POST['captcha'] && strtoupper($_POST['captcha']) === $_SESSION['captcha_code']) {
echo "验证通过!";
// 继续处理登录/注册等逻辑
} else {
echo "验证码错误,请重试。";
}
?>? 小提示:
- 生成后立即销毁 session 中的验证码(
unset($_SESSION['captcha_code'])),避免重复使用 - 生产环境建议加噪点、扭曲、字体混淆增强安全性
- 更现代的做法是用 AJAX 获取 JSON 验证码(含 base64 图片 + token),但原理一致
不复杂但容易忽略:PHP 脚本必须由 Web 服务器(如 Apache/Nginx)运行,不能双击打开;所有 .php 文件要放在能被访问的 Web 目录下(如 htdocs 或 www)。



















