AJ-Captcha 的干扰图片由前端 JS 控制,PHP 无法关闭;需在 new AJCaptcha({disturb: false}) 中显式设置 disturb 为 false 才能禁用干扰线/噪点/扭曲。

AJ-Captcha 的干扰图片默认开启,PHP 后端无法直接“关闭”它
AJ-Captcha 的干扰图片(如噪点、扭曲、干扰线)是前端 canvas 渲染时由 JS 控制的,PHP 侧不参与图形生成过程。你看到的验证码图像是前端调用 getImg() 后,通过 AJAX 请求后端接口(如 /captcha/get)拿到 base64 图片数据再绘制的——但干扰逻辑完全在前端 JS 里。
所以,不是 PHP 配置能开关的事,得改前端行为或后端返回的参数策略。
真正起作用的是前端初始化时的 disturb 配置项
AJ-Captcha 在 new 实例时接受一个配置对象,其中 disturb 控制是否启用干扰效果。设为 false 即可禁用:
new AJCaptcha({
el: '#captcha',
disturb: false, // ? 关键:关闭干扰线/噪点/扭曲
width: 200,
height: 60
});
注意:这个值必须显式传入,不能依赖默认(AJ-Captcha v2.x 默认是 true)。
立即学习“PHP免费学习笔记(深入)”;
常见错误:
- 只改 PHP 返回的
code或token,对干扰无影响 - 误以为修改后端生成图片的 GD 库参数(如
imagestring字体偏移)能关干扰——其实后端只管输出纯文本对应的标准图,干扰是前端 JS 叠加的
后端 PHP 接口只需保持基础兼容,无需额外处理干扰
你的 PHP 接口(比如 /captcha/get)只要做到两件事即可:
- 生成随机字符串(如 4~6 位字母+数字),存入 session 或缓存(key 为
captcha_token) - 返回标准 JSON:
{"code": 0, "data": {"img": "base64..."}},其中img是不含干扰的原始 PNG/JPEG base64(用 GD 或 imagick 生成即可)
干扰图不是后端画的,所以不用在 PHP 里调 imageline 加噪点,也不用判断 $_GET['disturb']——前端已经自己决定了要不要叠干扰。
性能提示:关闭 disturb 后,前端渲染更快,移动端卡顿明显减少;但安全水位下降,建议配合 IP 限频或 token 一次性校验使用。
如果用了封装 SDK 或二次开发版,检查是否覆盖了默认配置
有些团队基于 AJ-Captcha 封装了 PHP SDK 或 Vue/React 组件,可能把 disturb 写死为 true,或从后端接口返回字段中读取该开关(非官方行为)。此时要查:
- 前端初始化代码是否被包装层拦截,例如
Captcha.init({...})内部是否忽略传入的disturb - 是否有类似
data-disturb="1"的 HTML 属性被自动读取并覆盖 JS 配置 - 浏览器控制台搜
disturb,看实际传给AJCaptcha构造函数的值是不是false
最稳妥的方式是绕过封装,直接 new 原生实例,并明确写 disturb: false。
干扰图看着花哨,但开关不在 PHP 文件里,而是在你 new 那行 JS 代码的参数里——漏掉这个 false,所有后端改动都白搭。



















