LECMS后台上传图片报错

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

照着这篇排查一遍,你基本能定位并修好 LECMS 后台上传图片时出现的 500、403、上传失败、提示「非法文件类型」等常见报错。

LECMS 是 PHP 写的,上传图片失败几乎都出在四层:PHP 配置、目录权限、Web 服务器限制、图片处理扩展。下面按从快到慢的顺序走一遍。

第一步:先看报错原文,确定问题在哪一层

这一步的目标是拿到真实的错误信息,而不是只看后台那句「上传失败」。在 LECMS 后台进入「内容管理 → 添加文章」,点封面图上传,同时按 F12 打开开发者工具,切到 Network(网络)面板,勾选 XHR,点上传后找到请求,看 Response(响应)里的 JSON 内容。

  • 返回「文件上传失败」或空响应 + 状态码 500:多半是 PHP 报错或目录权限。
  • 返回 413:请求体超限,去第四步。
  • 返回「非法文件类型」:是格式白名单或 MIME 检测问题,去第五步。
  • 没有请求发出:前端 JS 报错或浏览器控制台有红字。

注意:LECMS 不同版本上传接口路径不一样,一般是 /admin.php?m=attachment&a=upload 或 /index.php?m=upload,以 Network 面板里实际看到的为准,别照着网上旧教程硬改。

第二步:确认上传目录存在且有写权限

上传的图片最终落在站点根目录下的 uploads(部分版本是 upload)目录,这个目录必须存在且 PHP 运行用户可写。先确认目录名:

find /www/wwwroot/你的站点目录 -maxdepth 2 -type d -name "upload*"

宝塔面板的环境,PHP 运行用户通常是 www。修正权限:

chown -R www:www /www/wwwroot/你的站点目录/uploads
chmod -R 755 /www/wwwroot/你的站点目录/uploads

注意:不要一上来就 chmod -R 777。宝塔默认开启「防跨站攻击(open_basedir)」,如果站点目录没在允许列表里,777 也没用。关掉方式:宝塔面板 → 网站 → 对应站点 → 设置 → 网站目录 → 取消勾选「防跨站攻击(open_basedir)」→ 保存。

第三步:调整 PHP 上传相关参数

打开 PHP 配置文件。宝塔面板路径:软件商店 → 已安装 → PHP-7.4(按你实际版本)→ 设置 → 配置修改;命令行路径 /www/server/php/74/etc/php.ini。把这几项改成:

file_uploads = On
upload_max_filesize = 20M
post_max_size = 24M
memory_limit = 256M
max_execution_time = 300

post_max_size 必须大于 upload_max_filesize,否则大图仍然传不上去。改完重启 PHP:

/etc/init.d/php-fpm-74 restart

注意:upload_tmp_dir 如果被显式指定了一个不存在或不可写的目录,任何上传都会失败。不确定就把这一行注释掉,用系统默认临时目录。

第四步:检查 Web 服务器的请求体限制

Nginx 默认 client_max_body_size 只有 1M,超过就直接返回 413,图片根本到不了 PHP。宝塔面板 → 网站 → 站点 → 设置 → 配置文件,在 server { } 段里加:

client_max_body_size 24m;

保存后重载:nginx -s reload。如果用 Apache,检查 LimitRequestBody 是否为 0(不限制)或足够大。

第五步:确认 GD 库和图片格式支持

LECMS 生成缩略图、水印依赖 GD 库。检查:

php -m | grep -iE "gd|fileinfo|exif"

没有输出就去宝塔 PHP 设置 → 安装扩展,勾选 gd、fileinfo、exif 安装,然后重启 PHP。如果上传的是 WebP 或 AVIF,还要确认 GD 编译时带了 WebP 支持,最省事的办法是先传一张 JPG 测试,能传说明就是格式问题。

第六步:看日志收尾

前面都正常还报错,就看日志。站点错误日志在 /www/wwwlogs/你的域名.error.log,PHP 日志在 /www/server/php/74/var/log/php-fpm.log,LECMS 自身日志在站点目录的 runtime/log/ 下。另外顺手 df -h 看下磁盘是不是满了,磁盘满也会表现为上传失败。

小结

  • 先看 F12 Network 里的真实响应和状态码,再决定改哪里。
  • 权限只给 755 + www 属主,同时检查 open_basedir 防跨站。
  • post_max_size 要大于 upload_max_filesize,改完必须重启 PHP。
  • Nginx 的 client_max_body_size 是 413 的元凶。
  • GD 库缺失会导致上传成功但没有缩略图或直接报错。
  • 最后用站点日志和 php-fpm 日志兜底,磁盘空间别忘看。
版权声明:本文来自 GJ站长论坛《LECMS后台上传图片报错》
原文链接:https://www.gj0.com/thread-749.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。

全部回复 0

还没有回复,来抢沙发~