织梦上传文件限制如何调整
织梦默认上传限制较保守,附件、图片、视频上传经常因大小、类型被拒。调整上传限制涉及 PHP 配置、织梦参数、nginx 配置三层,任何一处未改到位都会导致上传失败。下面给出完整的调整方法与安全注意事项。
一、上传限制的三层控制
- PHP 层:
php.ini中的upload_max_filesize、post_max_size; - 织梦层:后台"附件设置"中的最大文件大小、允许类型;
- Web 服务器层:nginx 的
client_max_body_size。
三者必须同时满足,取最小值生效。例如 PHP 允许 50M 但 nginx 限制 10M,上传 20M 文件仍会失败。
二、PHP 配置调整
编辑 /etc/php.ini(或 /etc/php/7.x/fpm/php.ini):
; 单个文件最大上传大小
upload_max_filesize=50M
; POST 请求体最大大小(必须 ≥ upload_max_filesize)
post_max_size=60M
; 内存限制(必须 ≥ post_max_size)
memory_limit=128M
; 最大执行时间(大文件上传耗时长)
max_execution_time=300
; 最大输入时间
max_input_time=300
修改后重启 PHP-FPM:
systemctl restart php-fpm
# 或
systemctl restart php7.4-fpm
三、Nginx 配置调整
编辑站点配置文件,在 http 或 server 块中加:
server {
listen 80;
server_name www.example.com;
# 允许上传的最大请求体
client_max_body_size 60M;
# 上传超时
client_body_timeout 300s;
# ... 其他配置
}
修改后 nginx -t && nginx -s reload。
四、织梦后台附件设置
登录后台 → 系统 → 系统基本参数 → 附件设置:
- 上传文件最大大小:单位 KB,例如填
51200表示 50MB; - 允许上传的文件类型:建议白名单
jpg|jpeg|gif|png|bmp|webp|pdf|zip|doc|docx|xls|xlsx|mp4; - 上传文件保存目录:默认
/uploads/allimg/{yy}{mm},可按需调整; - 图片水印:根据需要开启。
五、按上传通道分别调整
1. 编辑器上传(ckeditor)
编辑器自带的上传限制在 /include/ckeditor/config.js 或对应插件配置中:
config.filebrowserUploadUrl='/plus/q.php';
config.maxImageSize=50 * 1024 * 1024; // 50MB
2. 缩略图上传
发布文章时的缩略图上传走 /dede/article_add.php、/dede/article_edit.php,限制受后台附件设置控制。
3. 多图上传
图集功能走 /dede/album_add.php,单图大小受同样限制,但总大小受 post_max_size 控制。
若用宝塔面板,可在"软件商店—PHP—设置—上传限制"中直接调整,会自动同步 php.ini 与 nginx。
六、安全加固
1. 严格白名单
绝对禁止允许 php|php5|phtml|phar|htm|html|htaccess 等可执行或可解析类型:
// /include/uploadsafe.class.php
$cfg_upload_type='jpg|jpeg|gif|png|bmp|webp|pdf|zip|doc|docx|xls|xlsx|ppt|pptx|mp4|mp3';
$ext=strtolower(pathinfo($filename, PATHINFO_EXTENSION));
if(strpos($cfg_upload_type, $ext)===false) exit('禁止上传此类型');
2. MIME 一致性校验
$finfo=finfo_open(FILEINFO_MIME_TYPE);
$mime=finfo_file($finfo, $_FILES['file']['tmp_name']);
$allow_mime=['image/jpeg','image/png','image/gif','application/pdf'];
if(!in_array($mime, $allow_mime)) exit('MIME 类型禁止');
3. uploads 目录禁止执行 PHP
location ~* /uploads/.*\.(php|php5|phtml|phar|cgi|pl|py)$ {
deny all;
return 404;
}
七、调整后验证
- 新建一篇测试文章,上传一张 30MB 图片,确认成功;
- 尝试上传
test.php,应被拒绝; - 查看
/uploads/allimg/目录,确认文件正确写入; - 查看 PHP 错误日志,确认无
Maximum execution time报错。
八、常见问题排查
- 上传大文件 413 错误:nginx
client_max_body_size太小; - 上传大文件 500 错误:PHP
max_execution_time太短; - 上传大文件卡在 100%:CDN 或反向代理超时,需调整
proxy_read_timeout; - 上传类型不允许:织梦后台附件设置或
uploadsafe.class.php白名单。
九、注意事项
- 上传限制不是越大越好,过大会被攻击者利用上传超大文件耗尽磁盘与带宽;
- 普通站点建议图片 ≤ 10MB、附件 ≤ 50MB、视频走第三方平台;
- 会员上传通道必须更严格,限制单用户每日上传次数;
- 调整后立即在 nginx 加固 uploads 目录执行权限,防止 webshell。
上传限制调整要在"用户体验"与"安全"之间找平衡,建议把 PHP、nginx、织梦三层一次性配齐,并把白名单与 MIME 校验作为必选项。调整完成后用真实文件做一次端到端验证,确认正常上传可用、危险类型被拒。把上传通道作为站点的高危入口持续监控,能在不影响业务的前提下最大限度降低风险。