LECMS后台上传图片报错
照着这篇排查一遍,你基本能定位并修好 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 日志兜底,磁盘空间别忘看。
原文链接:https://www.gj0.com/thread-749.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。