Discuz(或 Discuz! X)在发布日志(日志/日记模块)时上传图片失败的问题,这是比较常见的,原因主要有以下几种,我按概率从高到低给你列出解决步骤。
1. 最常见原因:日志功能未同时开启相册(推荐先试这个)
Discuz 有一个小 bug/特性:即使开启了日志功能,如果没开启相册,日志里就无法上传图片。
解决方法:
- 登录后台 → 全局 → 站点功能(或 功能模块)。
- 把 相册 功能 开启。
- 保存后,点击 工具 → 更新缓存(全部缓存都更新一遍)。
- 返回前台测试日志上传图片。
这个方案在很多用户反馈中直接解决了日志专属的上传问题(论坛帖子能传,但日志不行)。
2. 附件目录权限问题(最普遍的上传失败原因)
日志/门户/帖子上传图片都依赖 data/attachment/ 目录。
检查与修复:
- Linux 服务器:把 ./data/ 和 ./data/attachment/ 目录权限设置为 777(或 755 + 文件夹可写)。
- Windows 服务器:给 data/attachment/ 目录添加 Everyone 或 IIS_USRS 的 读取 + 写入 权限。
- 同时检查 ./data/temp/ 或系统临时目录(php.ini 中的 upload_tmp_dir)是否有写权限。
权限不对的话,通常会提示“附件文件无法保存”或直接失败。修改后更新缓存再试。
3. PHP 配置限制(大小、临时目录等问题)
- 上传大小限制:图片太大时会失败。
- 修改 php.ini:
text
upload_max_filesize = 50M ; 改大一点
post_max_size = 50M
memory_limit = 256M ; 高分辨率图片可能需要更多内存
max_execution_time = 300
- 重启 PHP/FPM 或 Web 服务器(Nginx/Apache/IIS)。
- 临时目录权限:确保 upload_tmp_dir 指定的目录(默认 /tmp 或 C:\Windows\Temp)可写,特别是 Windows + IIS 环境。
4. 其他常见问题及快速排查
- 图片本身问题:试试换一张小图片(<2MB,分辨率别太高如 3000px 以内)。有时候高分辨率图片会导致 GD 库内存不足而失败。
- 用户组权限:后台 → 用户 → 用户组,确认当前用户组有“允许上传图片/附件”权限。
- H5 上传 vs Flash:新版 Discuz 已切换到 HTML5 上传,如果上传按钮消失或失败,可能是旧 Flash 残留,建议更新相关 JS 文件或保持最新版本。
- 上传后显示“Cancelled”或成功但不显示:图片其实已上传到 data/attachment/,但前端插入失败。多见于门户文章/日志,检查栏目设置或再更新缓存。
- 服务器空间/磁盘满:检查硬盘剩余空间。
- Nginx/Apache 配置:确认没有客户端最大 body 大小限制(client_max_body_size)。
排查建议顺序
- 先开启相册功能 + 更新缓存(最快)。
- 检查 data/attachment/ 权限。
- 查看服务器错误日志(PHP error_log 或 Discuz 的 data/log/ 文件),看具体报错信息(比如 500、IO 错误、Cancelled 等)。
- 压缩图片再试,或换个浏览器/无痕模式测试。
如果你试完以上还是不行,请告诉我:
- Discuz 具体版本(X3.4 / X3.5 等)
- 服务器环境(Linux + Nginx/Apache,还是 Windows + IIS)
- 报错的具体提示文字(是“上传失败”“附件无法保存”“Cancelled”还是空白?)
- 是否只有日志不能传,帖子/门户能不能传?