composer怎么安装验证码插件_composer怎么配置图形识别【入门】

2次阅读

优先选 gregwar/captcha:轻量、php 7.4+ 兼容好,laravel 新项目推荐;mews/captcha 仅适合 laravel 8 及以下,但维护滞后;切勿误用 intervention/image 或 ocr 工具替代验证码方案。

composer怎么安装验证码插件_composer怎么配置图形识别【入门】

怎么选对验证码插件(Laravel 场景最常见)

composer 本身不提供验证码功能,所谓“安装验证码插件”,实际是引入第三方包,比如 gregwar/captchamews/captcha。前者更轻量、无框架耦合;后者专为 Laravel 封装,自带路由和 Facade,但 Laravel 9+ 后维护变慢,容易报 class 'MewsCaptchaCaptchaServiceProvider' not found

  • 新项目优先试 gregwar/captcha:纯 PHP 实现,PHP 7.4+ 兼容好,composer require gregwar/captcha 即可
  • Laravel 8 及以下用 mews/captcha 可省点胶水代码,但得手动加 CaptchaServiceProviderconfig/app.php
  • 别装 intervention/image 单独来画验证码——它只是图像处理库,不是验证码方案,装了也白装

装完为什么生成不了图片?常见路径和权限坑

装完包不等于能用,gregwar/captcha 默认把临时图片存在 web/cache 目录,而 Laravel 的 public 目录下往往没这个子目录,或 webserver 没写权限,结果返回空白或 500。

  • 手动创建 public/cache 目录,并确保 webserver 用户(如 www-data)有写权限:chmod 755 public/cache
  • 改缓存路径更稳妥:在生成时传参,比如 CaptchaBuilder::create()->setOutPath('/tmp/captcha')->save('key')
  • apache 下如果启用了 mod_security,可能拦截含 captcha 字样的响应,错误日志里会出现 ModSecurity: access denied,临时关掉规则或加白名单

怎么在表单里正确集成(避免 csrf 和刷新失效)

验证码值必须和服务端 session 绑定,否则前端换图、后端校验就对不上。很多人直接用 js 随便 reload <img src="/captcha" alt="composer怎么安装验证码插件_composer怎么配置图形识别【入门】" >,但没同步更新隐藏域里的 Token,导致每次校验都失败。

  • 服务端生成时,把验证码 key 存进 session:$_SESSION['captcha_key'] = $key(原生 PHP)或 session(['captcha_key' => $key])(Laravel)
  • 前端换图时,必须同时请求新 key:fetch('/captcha/reload').then(r => r.json()).then(data => { img.src = data.img; input.value = data.key })
  • 校验前先检查 session 中的 key 是否存在且未过期,gregwar/captcha 默认有效期 300 秒,超时后 check() 直接返回 false

图形识别配置根本不存在——别被标题误导

Composer 安装的都是「生成」验证码的库,不是「识别」的。所谓“图形识别配置”,其实是 OCR 工具(如 Tesseract)的事,和验证码插件无关。强行让 PHP 调用 tesseract 去识别自己刚生成的图,既没必要,又绕远路,还极容易因字体/噪点/扭曲导致识别率低于 60%。

  • 如果你真在做自动化测试,需要绕过验证码,直接 mock session 中的验证值,而不是调 OCR
  • 生产环境绝对不要暴露识别接口POST /recognize-captcha 这种路由等于给爬虫送钥匙
  • 有些教程让你配 php-ocr 扩展,那是个早已归档的废弃项目,github 上最后更新是 2015 年

真正卡住人的,从来不是“怎么装”,而是“怎么让生成、传输、校验三步串起来还不被缓存/跨域/权限打断”。每个环节漏一个点,页面就只显示一个空盒子。

text=ZqhQzanResources