WordPress 媒体上传大小限制全解析
wordpress媒体上传大小限制

首页 2025-09-02 18:31:34

——写给既想保持安全又想放飞创意的开发者
各位同仁,今天我们不谈宏大叙事,只聊一个让产品同学抓耳、让运维同学皱眉的小门槛:WordPress 媒体上传大小限制。它像一道安检门,本意是挡住恶意洪流,却也常常误伤高清素材。下面我用一线技术管理视角,把这道门背后的机关、钥匙、以及备用通道一次性摊开,供各位在合规与效率之间做最优权衡。
一、先弄清“门”到底在哪
  1. PHP 层:upload_max_filesize / post_max_size
  2. Web Server 层:Nginx client_max_body_size 或 Apache LimitRequestBody
  3. WordPress 自检层:wp_max_upload_size() 函数返回的数值
  4. 云托管或 CDN 额外策略:部分平台在边缘节点再做一次裁切
只有四层全部放行,文件才能顺利落盘。
二、最小可行解:在主题或插件里插一行钩子
php
复制
@ini_set( 'upload_max_size' , '64M' );
@ini_set( 'post_max_size'  , '64M' );
这行代码在多数共享主机即可见效,但注意:如果宿主机启用了“不可修改 ini”策略,则会被直接忽略。此时请转向方案三。
三、运维级根治:三层配置联动
  1. PHP-FPM
    新建或编辑 php.ini:
    复制
    upload_max_filesize = 64M
    post_max_size = 64M
    max_execution_time = 300
    保存后重载 PHP-FPM:systemctl reload php-fpm
  2. Nginx
    在 server 或 location 段增加:
    client_max_body_size 64M;
    热重载:nginx -s reload
  3. WordPress 层面兜底
    在 wp-config.php 末尾追加:
    define( 'WP_MEMORY_LIMIT', '256M' );
    防止后台大图裁剪时内存溢出。
四、容器与 Serverless 场景
若项目跑在 K8s Pod,需同步修改 ConfigMap 中的 php.ini 并重建镜像;若使用某云函数托管,则需在平台控制台直接调整“函数规格—单请求最大体积”,否则任何本地配置都会被覆盖。
五、安全与审计建议
  1. 设置上传白名单 MIME 类型,防止伪装文件。
  2. 定期扫描 uploads 目录,执行 find . -type f -mtime -7 -exec ls -lh {} \; 观察异常增长。
  3. 对所有超过 5 MB 的文件触发异步病毒扫描任务,可用 ClamAV + SQS 组合。
六、灰度与回滚
先在 staging 环境验证 64 MB 上限,通过后再同步到生产。为避免用户侧缓存旧限制,可让前端在每次上传前读取 /wp-json/wp/v2/media 返回的 headers,实现实时感知。
结语
技术决策永远不是单选题,而是“在资源、风险、体验”三角里找动态平衡。只要我们把每一层闸门都当作可观测对象,而不是黑盒,就能在保障系统安全的前提下,让创意素材自由流动。

教程:手把手破解 WordPress 媒体上传大小限制
(按由易到难排序,任选其一即可)
步骤 1:后台可视化插件法(适合小白,3 分钟)
  1. 进入「插件→安装插件」,搜索并安装「WP Increase Upload Filesize」。
  2. 启用后,在「设置→Increase Upload Filesize」里将数值改为 64M,保存。
  3. 刷新「媒体→添加」页面,如仍提示 2 MB,继续步骤 2。
步骤 2:主题函数追加法(适合有 FTP 权限的用户,5 分钟)
  1. 用 SFTP 连接服务器,进入 /wp-content/themes/你的主题/。
  2. 编辑 functions.php,在文件末尾追加:
    php
    复制
    add_filter( 'upload_size_limit', function() { return 64 * 1024 * 1024; } );
  3. 保存并重新登录后台验证。
步骤 3:修改 .htaccess(仅限 Apache,7 分钟)
  1. 在网站根目录找到或新建 .htaccess 文件。
  2. 追加:
    复制
    php_value upload_max_filesize 64M
    php_value post_max_size 64M
    php_value max_execution_time 300
  3. 若页面出现 500 错误,说明主机禁用 php_value,回滚文件并改用步骤 4。
步骤 4:编辑 php.ini(VPS/云服务器,10 分钟)
  1. SSH 登录服务器:ssh user@ip
  2. 查找 php.ini 路径:php --ini | grep "Loaded Configuration File"
  3. 备份:sudo cp /etc/php/8.2/fpm/php.ini /etc/php/8.2/fpm/php.ini.bak
  4. 编辑:sudo nano /etc/php/8.2/fpm/php.ini
    找到并修改:
    复制
    upload_max_filesize = 64M
    post_max_size = 64M
    max_execution_time = 300
  5. 保存后重载:sudo systemctl reload php8.2-fpm
步骤 5:Nginx 补充配置(若用 Nginx,12 分钟)
  1. 打开站点配置文件:sudo nano /etc/nginx/sites-available/your-site
  2. 在 server 或 location / 区块内加入:
    client_max_body_size 64M;
  3. 测试并重载:
    复制
    sudo nginx -t
    sudo systemctl reload nginx
步骤 6:容器环境(K8s 示例,15 分钟)
  1. 创建 ConfigMap:
    复制
    kubectl create configmap php-ini \
      --from-file=php.ini \
      -n your-namespace
  2. 在 Deployment 中挂载:
    复制
    volumeMounts:
      - name: php-config
        mountPath: /usr/local/etc/php/php.ini
        subPath: php.ini
    volumes:
      - name: php-config
        configMap:
          name: php-ini
  3. 滚动更新:kubectl rollout restart deployment/your-wp
验证
  1. 回到 WordPress 后台 → 媒体 → 添加新文件,查看右下角提示是否已变为 64 MB。
  2. 上传一张 10 MB 的测试图,确认无 413 Request Entity Too Large 错误。
  3. 若仍失败,使用浏览器 F12 → Network 查看返回状态码,对照上方步骤逐项排查。
至此,WordPress 媒体上传大小限制已被彻底解锁,祝各位发布高清大作一路畅通。
MySQL连接就这么简单!本地远程、编程语言连接方法一网打尽
还在为MySQL日期计算头疼?这份加一天操作指南能解决90%问题
MySQL日志到底在哪里?Linux/Windows/macOS全平台查找方法在此
MySQL数据库管理工具全景评测:从Workbench到DBeaver的技术选型指南
MySQL密码忘了怎么办?这份重置指南能救急,Windows/Linux/Mac都适用
你的MySQL为什么经常卡死?可能是锁表在作怪!快速排查方法在此
MySQL单表卡爆怎么办?从策略到实战,一文掌握「分表」救命技巧
清空MySQL数据表千万别用错!DELETE和TRUNCATE这个区别可能导致重大事故
你的MySQL中文排序一团糟?记住这几点,轻松实现准确拼音排序!
别再混淆Hive和MySQL了!读懂它们的天壤之别,才算摸到大数据的门道