海洋 CMS 后台验证码不显示怎么修复
海洋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,否则改动不生效。
原文链接:https://www.gj0.com/thread-824.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。