船说 CMS 网站出现 500 错误怎么排查

juming
juming 初级会员超兽战士
发布于 2026-10-08 06:57 ·1 浏览 ·0 回复

照着走一遍,你就能独立定位船说 CMS 站点的 500 错误出在 PHP、Web 服务器还是数据库,并把它改回能访问的状态。

第一步:确认 500 是谁抛出来的

这一步要弄清楚「500 是服务器内部错误」这句话背后到底是哪一层出的问题,结果决定你下一步去看哪份日志。

在浏览器按 F12 打开「网络」面板,刷新出错页面,点开那条状态为 500 的请求,看「响应头」里有没有 Server: nginx 或 Server: Apache。再看响应体:如果只有几十字节的空白或一句 Internal Server Error,说明是 Web 服务器或 PHP 直接崩了;如果返回一大段中文报错,说明是船说 CMS 自己的异常处理器接住了错误。

注意:不要在浏览器里反复刷新等它自己好,500 不会自愈,刷多了只会把错误日志刷满、覆盖掉最早的现场。

第二步:打开 PHP 错误日志(最有效的一步)

这一步的目标是拿到「哪个文件、第几行、什么错」这行原文,90% 的 500 靠它就能定位。

用宝塔面板的:左侧菜单「网站」→ 找到你的站点 → 点右侧「设置」→「配置文件」,能看到 error_log 路径;PHP 日志一般在 /www/wwwlogs/php_errors.log。然后 SSH 登录服务器执行:

tail -n 100 -f /www/wwwlogs/php_errors.log

再刷新一次页面,终端里会实时滚出新的错误行。如果日志是空的,说明 PHP 根本没记录错误,进入宝塔「软件商店」→ 找到你用的 PHP 版本(比如 PHP-7.4)→「设置」→「配置修改」,确认:

log_errors = On
error_log = /www/wwwlogs/php_errors.log
display_errors = Off

改完点「保存」,再点「服务」→「重载配置」。

注意:display_errors = On 只适合临时排查,错误信息会带着服务器绝对路径暴露给访客,排完必须改回 Off。

第三步:临时打开调试模式,看到完整堆栈

如果 PHP 日志只有一行「PHP Fatal error」没有调用栈,就把船说 CMS 自己的调试开关打开。

登录后台(默认入口 /admin.php),进「系统」→「系统设置」→「基本设置」,找「调试模式 / Debug」开关打开;部分版本叫「开发者模式」,在 config 目录下的配置文件里。改完后刷新前台,页面会直接显示报错的 PHP 文件路径、行号和 SQL 语句。

如果这个开关找不到,直接在站点根目录找 config 文件夹里数据库配置文件(通常叫 database.php 或 config.php),确认里面的库名、用户名、密码、主机 127.0.0.1 是否和宝塔「数据库」页面上显示的完全一致。

注意:调试模式打开期间不要让搜索引擎爬,排完立刻关掉。

第四步:看 Web 服务器的错误日志

PHP 日志没有新内容、但请求还是 500,问题多半在 Nginx/Apache 这一层。

宝塔面板该站点「设置」→「网站日志」,选 error.log,能看到类似 rewrite or internal redirection cycle、FastCGI sent in stderr、Permission denied 的提示。

最常见的三类对应解法:

  1. 伪静态没配:宝塔该站点「设置」→「伪静态」,下拉选「船说CMS」或粘贴官方规则;Apache 环境还要确认 .htaccess 存在,且站点配置里 AllowOverride All。
  2. 目录权限不对:SSH 执行 chown -R www:www /www/wwwroot/你的站点目录,再 chmod -R 755 该目录,runtime、cache、uploads 三个目录给 755(宝塔下运行用户是 www)。
  3. PHP 版本不兼容:船说 CMS 多数版本跑 PHP 7.2~7.4,切到 PHP 8 后常因函数签名变化直接 500。在该站点「设置」→「网站目录」上方或「PHP 版本」处切回 7.4,并安装 mysqli、gd、curl、fileinfo、mbstring、openssl 扩展,然后重载 PHP。

第五步:按报错原文对症修改

拿到行号和错误类型后,对照处理:

  • Allowed memory size ... exhausted:把 php.ini 的 memory_limit 从 128M 调到 256M 或 512M。
  • Maximum execution time exceeded:max_execution_time 调到 300。
  • 某个插件/模板目录下的文件报语法错误:先把该插件目录改名(如 plugin_bak)让程序跳过加载,站点恢复后再去官方仓库重下覆盖。
  • 数据库连接报错:先确认宝塔「数据库」页面里 MySQL 是「运行中」,再用 mysql -u用户名 -p 手动连一次验证密码。

注意:改任何文件前先 cp 文件名 文件名.bak,改错了能一秒回滚。

小结

  1. 先分清 500 来自 Web 服务器还是船说 CMS,再决定看哪份日志。
  2. PHP 错误日志(/www/wwwlogs/php_errors.log)是定位 500 的第一首选,用 tail -f 实时盯。
  3. 日志不够就临时开调试模式拿完整堆栈,排完立刻关。
  4. 高频原因就四个:伪静态规则缺失、目录权限/属主错误、PHP 版本与扩展不匹配、数据库配置错误。
  5. 每次改动前备份,改完重载 PHP-FPM 或 Nginx 配置生效。
版权声明:本文来自 GJ站长论坛《船说 CMS 网站出现 500 错误怎么排查》
原文链接:https://www.gj0.com/thread-803.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。

全部回复 0

还没有回复,来抢沙发~