meta-description: WordPress大文件上传配置完整教程,详解Nginx、PHP、WordPress多层级上传限制修改。

keywords: WordPress大文件上传,upload_max_filesize,Nginx client_max_body_size,WordPress上传限制,PHP配置

# WordPress大文件上传配置完整教程

本文详细介绍如何配置Nginx、PHP和WordPress以支持大文件上传,解决上传失败问题。

## 上传限制层级

WordPress大文件上传涉及多个层级的限制,需要逐一修改:

| 层级 | 配置文件 | 限制项 |

|------|----------|----------|

| Nginx | nginx.conf | client_max_body_size |

| PHP | php.ini | upload_max_filesize, post_max_size |

| PHP-FPM | www.conf | upload_max_filesize, post_max_size |

| WordPress | wp-config.php | 无直接限制(受PHP限制) |

| 主题/插件 | functions.php | upload_size_limit过滤器 |

## Nginx配置

### 修改nginx.conf


http {
    # 全局设置(所有站点)
    client_max_body_size 100m;
    
    # 或者针对特定站点
    server {
        client_max_body_size 100m;
        
        location ~ \.php$ {
            # PHP配置
        }
    }
}

### 针对WordPress的Nginx配置


server {
    listen 80;
    server_name example.com;
    root /var/www/html;
    
    # 重要:必须在server块或location块中设置
    client_max_body_size 100m;
    
    location / {
        try_files $uri $uri/ /index.php?$args;
    }
    
    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass unix:/run/php/php-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        
        # 也可以在location中单独设置
        # client_max_body_size 100m;
    }
}

### 验证Nginx配置


# 测试配置
sudo nginx -t

# 重载Nginx
sudo systemctl reload nginx

## PHP配置

### 修改php.ini


; 修改上传文件大小限制
upload_max_filesize = 100M

; 修改POST请求大小限制(必须大于upload_max_filesize)
post_max_size = 100M

; 修改执行时间(大文件上传需要更长时间)
max_execution_time = 300

; 修改输入时间
max_input_time = 300

; 修改内存限制
memory_limit = 256M

### 查找php.ini位置


# 查找php.ini路径
php --ini

# 或者创建phpinfo文件
echo "" > /var/www/html/info.php
# 访问 https://example.com/info.php 查看配置文件路径

# 删除phpinfo文件(安全检查)
rm /var/www/html/info.php

### PHP-FPM配置

如果使用PHP-FPM,还需要修改池配置:


; /etc/php/8.2/fpm/pool.d/www.conf

; 覆盖php.ini设置
php_admin_value[upload_max_filesize] = 100M
php_admin_value[post_max_size] = 100M
php_admin_value[max_execution_time] = 300

### 重启PHP-FPM


# Ubuntu/Debian
sudo systemctl restart php8.2-fpm

# CentOS/RHEL
sudo systemctl restart php-fpm

## WordPress配置

### 修改wp-config.php


// 在wp-config.php中添加(虽然不直接控制上传大小,但可以设置相关参数)

// 增加内存限制
define('WP_MEMORY_LIMIT', '256M');
define('WP_MAX_MEMORY_LIMIT', '512M');

// 禁用上传限制(某些情况下)
define('AS3CF_AUTOMATIC_RETRY_LIMIT', 100);

### 通过 functions.php 修改


// 在主题的functions.php中添加

// 修改上传大小限制
add_filter('upload_size_limit', 'increase_upload_size');
function increase_upload_size($size) {
    return 100 * 1024 * 1024; // 100MB
}

// 修改多站点上传限制(如果是多站点)
add_filter('upload_mimes', 'allow_additional_mime_types');
function allow_additional_mime_types($mimes) {
    $mimes['svg'] = 'image/svg+xml';
    return $mimes;
}

## 多站点网络配置

如果是WordPress多站点,还需要在网络设置中修改:

### 网络设置

1. 登录WordPress后台

2. 进入 设置 → 网络设置

3. 修改 上传文件大小 限制

4. 保存更改

### 数据库修改(可选)


-- 修改站点的上传文件大小限制(site_meta表)
UPDATE wp_sitemeta 
SET meta_value = '104857600'  -- 100MB in bytes
WHERE meta_key = 'upload_filetypes';

-- 或者通过网络选项API
UPDATE wp_sitemeta 
SET meta_value = '100'  -- 单位MB
WHERE meta_key = 'fileupload_maxk';

## .htaccess配置(Apache)

如果使用Apache,需要修改.htaccess:


# 在WordPress规则的BEFORE添加
php_value upload_max_filesize 100M
php_value post_max_size 100M
php_value memory_limit 256M
php_value max_execution_time 300
php_value max_input_time 300

# WordPress重写规则
# BEGIN WordPress
# ...
# END WordPress

## 分阶段上传(大文件)

对于超大文件(>1GB),建议使用分片上传或客户端分片:

### 使用插件实现分片上传

| 插件 | 特点 |

|------|------|

| Delightful Downloads | 支持大文件下载/上传 |

| WP File Download | 文件管理+上传 |

| Gravity Forms | 表单上传+分片 |

### 手动实现分片上传(JavaScript)


// 前端分片上传示例
async function uploadLargeFile(file) {
    const chunkSize = 5 * 1024 * 1024; // 5MB chunks
    const totalChunks = Math.ceil(file.size / chunkSize);
    
    for (let i = 0; i < totalChunks; i++) {
        const start = i * chunkSize;
        const end = Math.min(start + chunkSize, file.size);
        const chunk = file.slice(start, end);
        
        const formData = new FormData();
        formData.append('chunk', chunk);
        formData.append('index', i);
        formData.append('total', totalChunks);
        formData.append('filename', file.name);
        
        await fetch('/wp-admin/admin-ajax.php?action=upload_chunk', {
            method: 'POST',
            body: formData
        });
    }
}

## 验证配置

### 创建phpinfo文件验证


# 创建phpinfo文件
echo "" > /var/www/html/info.php

# 访问查看配置
# 在浏览器打开 https://example.com/info.php

# 搜索 upload_max_filesize 和 post_max_size 确认值

# 删除文件
rm /var/www/html/info.php

### WordPress后台验证

1. 进入 媒体 → 添加

2. 查看页面底部显示的上传限制

3. 应该显示 "最大上传文件大小: 100 MB"

## 常见错误排查

| 错误信息 | 原因 | 解决方案 |

|----------|------|----------|

| "上传的文件超过 php.ini 中的 upload_max_filesize 限制" | PHP配置未生效 | 重启PHP-FPM,检查配置文件路径 |

| "POST Content-Length exceeds limit" | post_max_size太小 | 增加post_max_size(必须大于upload_max_filesize) |

| "413 Request Entity Too Large" | Nginx限制 | 修改client_max_body_size |

| "504 Gateway Timeout" | 执行时间太短 | 增加max_execution_time |

| "内存耗尽" | memory_limit太小 | 增加memory_limit |

## 完整配置示例

### Nginx + PHP-FPM 完整配置


# /etc/nginx/sites-available/wordpress
server {
    listen 80;
    server_name example.com;
    root /var/www/html;
    index index.php;
    
    # 关键:设置上传大小限制
    client_max_body_size 100m;
    
    # PHP处理
    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass unix:/run/php/php8.2-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        
        # 也可以在这里设置(优先级高于http块)
        # fastcgi_param PHP_VALUE "upload_max_filesize=100M";
        # fastcgi_param PHP_VALUE "post_max_size=100M";
    }
    
    # 重写规则
    location / {
        try_files $uri $uri/ /index.php?$args;
    }
}

### PHP 8.2 配置


; /etc/php/8.2/fpm/php.ini

; 上传文件大小
upload_max_filesize = 100M

; POST请求大小
post_max_size = 100M

; 执行时间(秒)
max_execution_time = 300

; 输入解析时间
max_input_time = 300

; 内存限制
memory_limit = 256M

; 最大输入变量数(防止大表单提交失败)
max_input_vars = 3000

## 安全建议

1. 不要设置过大:100M足够大多数场景,不要设置到1G或更大

2. 配合防盗链:防止盗用上传接口

3. 限制文件类型:只允许必要文件类型上传

4. 定期清理:清理未使用的上传文件

5. 使用CDN:大文件使用对象存储+CDN

正确配置Nginx、PHP和WordPress后,即可支持大文件上传需求。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。