海洋 CMS 后台验证码不显示怎么修复

juming
juming 初级会员超兽战士
发布于 2026-10-08 07:46 ·2 浏览 ·0 回复

海洋CMS 后台验证码不显示,90% 的原因是服务器 PHP 环境缺少 GD 库、session 目录不可写,或验证码输出文件带 BOM/被提前输出了内容——按「浏览器看请求 → 查 GD → 查 session 权限 → 查 BOM」的顺序排查,通常 10 分钟内能定位。

第一步:怎么判断是「图片没生成」还是「被浏览器挡住了」?

结论:先看验证码图片请求返回什么,再决定往哪个方向修,不要一上来就改代码。

打开后台登录页,按 F12 → Network(网络)面板 → 勾选 Preserve log → 刷新页面。在请求列表里找 <img> 类型的请求,它的 src 通常指向 vdimgck.php、checkcode.php 这类脚本(不同版本的海洋CMS 文件名不同,以你登录页 HTML 里的实际 src 为准),或者是一个 ?code=xxx 的伪静态地址。

看这个请求的三要素:

  • 状态码 500 / 502:PHP 报错或进程崩溃,去服务器看 PHP 错误日志(宝塔面板在「网站 → 日志」,或 /www/wwwlogs/ 下)。
  • 状态码 200 但响应是 0 字节或一堆乱码 HTML:说明图片前面被输出了额外内容,看下面的 BOM 那一节。
  • 状态码 200 且是图片,但页面不显示:说明是浏览器缓存或 CDN 缓存了旧图,属于最后一节的问题。

第二步:PHP GD 库没开怎么办?

结论:海洋CMS 的验证码是用 PHP 的 GD 图像库(php_gd2 扩展)实时绘制的,GD 没开,验证码就是一张空白图或直接 500。

验证方法:SSH 执行 php -m | grep -i gd,有输出说明已开;没输出就是没开。也可以用 php -i | grep -i "gd support" 确认。

开启方法分两种面板:

  • 宝塔面板:软件商店 → 找到你站点用的那个 PHP 版本(比如 PHP 7.4)→ 设置 → 安装扩展 → 勾选 gd → 安装,然后重启 PHP。
  • 命令行/LNMP:编辑 php.ini(用 php --ini 查路径),去掉 ;extension=gd 前面的分号,然后 systemctl restart php-fpm(版本号按实际填,如 php74-php-fpm)。
  • 虚拟主机/cPanel:在「Select PHP Version → Extensions」里勾选 gd。

注意:MySQL 的 mysqli、pdo_mysql 扩展也顺手确认一下,验证码不显示和数据库连不上经常是同一个「扩展没开」的原因。

第三步:session 目录不可写怎么办?

结论:验证码的值是存在 session 里的,session 写入失败时,图片可能画得出来但校验永远失败,或者干脆不生成。

执行 php -i | grep session.save_path 看目录,通常是 /tmp 或 /var/lib/php/sessions。再执行 ls -ld /tmp 确认权限是 drwxrwxrwx(1777)。如果是自建目录,改成 chmod 777 或把属主改成 PHP 运行用户(宝塔通常是 www):chown -R www:www /www/server/php/74/var/session。

还有一个高频坑:磁盘满了(df -h 一看便知)或 /tmp 被安全软件清空,导致 session 无法落盘。

第四步:文件有 BOM 或多余空白怎么排查?

结论:任何 PHP 文件在 <?php 之前有空格、BOM 头或空行,都会让图片输出前先吐出字节,浏览器就把它当坏图。

排查命令:grep -rl $'\xEF\xBB\xBF' /www/wwwroot/你的站点 --include=*.php,列出来的文件用 Notepad++ 或 VS Code 转成「UTF-8 无 BOM」再保存。

另一个常见原因是 PHP 配置里 output_buffering = Off。改成 output_buffering = 4096 再重启 PHP,能顺带压掉大部分「headers already sent」报错。

第五步:PHP 版本和缓存问题怎么处理?

结论:老版本海洋CMS 在 PHP 8.0 及以上容易出现验证码脚本报错,建议切到 PHP 7.2–7.4。

如果服务器同时装了多个 PHP 版本,确认站点绑定的版本和上面开 GD 的版本是同一个。切换在宝塔「网站 → 站点 → 设置 → 网站目录/PHP 版本」里改,改完重启 PHP。

最后是缓存:用 Ctrl+F5 强制刷新,或在 CDN 后台对该验证码 URL 做「不缓存」规则。CDN 缓存验证码会导致图片一直是同一张,看着像「不显示/不刷新」。

收尾

一句话总结:先 F12 看验证码请求的状态码,500 就查 PHP 错误日志和 GD 扩展,200 但空白就查 session 目录权限和文件 BOM,图片正常但页面不显示就清 CDN 和浏览器缓存。四步走完,海洋CMS 后台验证码基本都能恢复。改完任何 PHP 配置,记得重启 PHP-FPM,否则改动不生效。

版权声明:本文来自 GJ站长论坛《海洋 CMS 后台验证码不显示怎么修复》
原文链接:https://www.gj0.com/thread-824.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。

全部回复 0

还没有回复,来抢沙发~