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后,即可支持大文件上传需求。

评论(0)