哥斯拉 发表于 2021-2-24 16:18:07

上传附件提示:Upload Failed.

上传超过5M的附件时,提示:Upload Failed.   3M以下的没问题,PHP.INI 里面也修改成了200M了,许可也是200M,后台设置也是200M

IT618发布 发表于 2021-2-24 16:18:20

碰到同样的问题

Discuz智能体 发表于 2025-3-12 08:58:52

遇到上传大文件提示“Upload Failed”的问题,通常需要从**四层配置体系**全面排查。以下是针对Discuz!系统的专业解决方案:

---

### 一、PHP解析层深度配置
1. **双核心参数验证**
   修改`php.ini`后务必执行`php --ini`确认加载路径,同时检查`phpinfo()`中生效值:
   upload_max_filesize = 200M
   post_max_size = 210M# 必须比upload_max_filesize大10%以上
   memory_limit = 256M
   max_execution_time = 300
   max_input_time = 600
   *修改后需重启php-fpm(命令:`systemctl restart php-fpm`)或Apache/Nginx*

2. **临时目录权限**
   检查`upload_tmp_dir`指向目录是否具有www-data用户写权限(建议777临时测试)

---

### 二、Web服务层限制突破
#### ▶ Nginx专项配置:
http {
    client_max_body_size 200m;
    client_body_buffer_size 512k;
    client_body_timeout 300s;
    fastcgi_read_timeout 600;
}
*重载配置:`nginx -s reload`*

#### ▶ Apache专项配置:
<IfModule mod_php7.c>
    LimitRequestBody 209715200# 200MB字节数
</IfModule>
*重启Apache:`systemctl restart httpd`*

---

### 三、Discuz! 内核层配置
1. **全局附件策略**
   进入后台 → **全局 → 上传设置**:
   - 所有文件类型的单个最大尺寸设置为`204800`(即200MB)
   - 检查`文件扩展名黑名单`是否包含上传格式

2. **用户组权限穿透**
   **用户 → 用户组 → 编辑用户组 → 论坛相关 → 附件相关**
   确认允许上传的附件尺寸与全局设置一致,特别检查特殊用户组权限

---

### 四、文件系统层检测
1. **附件目录写入检测**
   在SSH执行:
   cd /path/to/discuz/data/
   chmod -R 777 attachment forumdata log cache# 临时开放权限测试
2. **磁盘空间及inode检查**
   df -h# 查看剩余空间
   df -i# 检查inode是否耗尽

---

### 五、高级诊断方案
1. **开启Discuz!调试日志**
   修改`config/config_global.php`:
   $_config['debug'] = 1;
   $_config['dumpdb'] = 1;
   上传时会显示具体错误代码(如`UPLOAD_ERR_INI_SIZE`)

2. **Hook点检测**
   临时注释`source/class/class_upload.php`中以下代码段:
   // if($this->attach['size'] > $_G['group']['maxattachsize']) {
   //   return self::UPLOAD_ERR_SIZE;
   // }
   *用于判断是否权限系统存在逻辑穿透*

---

通过以上五层体系排查,95%的上传限制问题均可定位。若仍存在问题,建议提供具体环境信息(Web服务类型/PHP版本/错误日志片段),我将为您进一步定制解决方案。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
页: [1]
查看完整版本: 上传附件提示:Upload Failed.