修改 WordPress 媒体上传大小尺寸的限制适用nginx/Apache

有时候,我们需要上传尺寸比较大的附件到 WordPress 站点,可是上传的时候,WordPress 却提示我们「最大上传文件大小: 2 MB。」(如下图),这可如何是好?明明服务器有足够的空间,我们上传尺寸稍微大一点的图片,就受到了限制。

很多服务器默认允许最大上传的文件尺寸为 2MB

其实很多时候,这个限制不是 WordPress 干的,而是我们的服务器锅,为了安全和性能考虑,服务器软件会有一些默认的限制。对于 WordPress 来说,可以上传的附件尺寸大小主要受到了 PHP 和 Nginx 的影响。

增加 PHP 允许上传的最大附件尺寸

我们知道,PHP 服务器的主要设置一般都在 php.ini 文件里面,想要增大 PHP 允许上传的最大附件尺寸,我们首先需要找到 php.ini 的位置,然后编辑这个文件里面对应的设置项。

找到 php.ini 文件

在服务器上,运行下面的命令,可以很容易的找到 php 文件的位置。

php -i | grep 'php.ini'   

上面的命令运行之后,返回如下结果,其中的 /usr/local/etc/php/7.3/php.ini 就是我们需要找的 php.ini 文件的位置。

Loaded Configuration File => /usr/local/etc/php/7.3/php.ini

使用您喜欢的编辑器编辑这个文件,修改或加入以下设置。

upload_max_filesize = 128M
post_max_size = 128M
memory_limit 256M
max_execution_time 300
max_input_time 300

这些设置项都有各自的作用。

  • upload_max_filesize: 最大上传尺寸
  • post_max_size: POST 请求最大尺寸
  • memory_limit: PHP 进程可以使用的内存限制
  • max_execution_time:PHP 程序的最大执行时间
  • max_input_time:最大输入时间

其中影响最大上传尺寸的设置项是 upload_max_filesize 和 post_max_size,其他几个选项主要是为了防止上传程序使用过多的内存和因为网络原因造成的执行时间过长,导致网站速度变慢。

如果使用的服务器支持通过 .user.ini 更改 PHP-FPM 配置,也可以把上面的配置代码写入到 .user.ini 文件中。

编辑并保存上面的设置项之后,重启一下 PHP-FPM 进程(不会重启的看本文最后一节),刷新一下页面,再打开附件上传页面看看,我们会发现,最大上传文件的尺寸已经变成了 128MB,这说明我们的设置已经生效了。

Apache 服务器通过 .htaccess 文件取消 WordPress 上传附件大小限制

如果您使用的 Web 服务器是 Apache,并且支持 .htaccess 文件,我们可以通过 .htaccess 文件修改上面的设置项来达到同样的目的。把下面设置项加入到网站根目录的 .htaccess 文件中,刷新页面,最大上传文件尺寸同样也会变成 128MB。

php_value upload_max_filesize 128M
php_value post_max_size 128M
php_value memory_limit 256M
php_value max_execution_time 300
php_value max_input_time 300

通过 ini_set 取消附件大小限制?

有些朋友可能会有疑问,既然是 PHP 设置,我们通过 ini_set() 函数来修改 upload_max_size 和 post_max_size 的值不就可以了,何必这么麻烦?

不错的想法,其实我也尝试过这种方法,发现是行不通的,研究了一通后发现,原来这两个设置是不能通过 ini_set() 函数设置的。具体那些配置项可以通过 ini_set() 函数设置呢?请参考 PHP 官方的说明。

多站点网络中通过后台设置增加允许上传的最大附件

如果我们是在 WordPress 多站点网络中的站点上传文件的,即便弄好了上面的配置,我们会发现,最大上传文件的尺寸依然没有变化,这是因为 PHP 的多站点设置中有一个选项限制了网络中的站点可以上传文件的最大尺寸,我们增加这个尺寸就可以了,如下图所示(注意这里的单位是 KB):100兆字节(mb)=102400千字节(kb)

PHP 设置完了之后,我们发现,上传界面中最大上传文件的尺寸变大了,可是当我们上传大尺寸附件的时候,会出现「上传附件时出现错误」的提示,这是因为 Nginx 对请求 body 的尺寸有限制,在 Nginx 的 http 配置中,我们同样调大这个配置就可以了。

http {
    client_max_body_size 128m;
}

重启 PHP-FPM 和 Nginx 进程使上面的设置生效

搞定了上面的设置之后,重启 php-fpm 和 nginx 进程,上面的设置才能生效。

service php-fpm restart
service nginx reload 
© 版权声明
THE END
喜欢就支持以下吧
点赞0
分享
评论 抢沙发