奇技淫巧系列 WordPress 上传文件大小超过php.ini限制问题的解决方案汇总
本文最后更新于 153 天前,其中的信息可能已经有所发展或是发生改变,如有失效可到评论区留言。

前言

使用wordpress建站的朋友,如有以下应用场景:安装新主题、安装插件、上传文件和图片等,估计大都遇到过下图中的尴尬问题:
image.png

这是因为wordpress是使用PHP语言开发的,而php.ini 是 PHP 的主配置文件,它定义了 PHP 的全局设置,包括 upload_max_filesize、post_max_size 等参数,这些设置默认适用于所有运行在该服务器上的 PHP 脚本(wordpress当然也不例外),因为有的参数的默认值设置得太过于保守,比如”upload_max_filesize”的默认值为2M,所以导致wordpress上传超过2M的文件就会出现上图的错误。

本文列举了几种解决该问题的办法,大家可以根据自己的实际环境选择最适合自己的解决方案。

解决方案汇总

修改php.ini(一般不推荐)

这种方式影响面最大(会影响整个主机上的所有PHP脚本,慎用),正常情况下不推荐使用(不管是源码部署还是docker方式部署wordpress,都不推荐),不过如果非要2选一的话,源码部署wordpress时使用该方式要方便一点,当然,还需要有部署主机的管理员权限。

  1. 找到 php.ini 文件 :
    在你的服务器上,找到 php.ini 文件的位置。这个文件通常位于 PHP 安装目录下,或者在你的主机控制面板中。
  2. 编辑 php.ini 文件 :
upload_max_filesize = 100M #默认2M,这就是无法上传大文件的罪魁祸首,改成你需要的数值,比如100M
post_max_size = 64M #默认8M,这个参数影响上传文章的大小,一般8M也够了,可以改大点,比如64M
  1. 重启服务器 :
    修改后,保存文件并重启你的 web 服务器(如 Apache 或 Nginx),以使更改生效。

修改 .htaccess 文件(docker部署及使用Apach源码部署方式推荐)


注:.htaccess 文件是一个用于配置 Apache Web 服务器行为的文件。它的名称是 “hypertext access” 的缩写,通常位于网站的根目录或子目录中,文件的有效范围是其所在目录及其子目录。每个目录都可以有自己的 .htaccess 文件,且可以覆盖上级目录的设置。通过 .htaccess 文件,网站管理员可以对服务器的配置进行细粒度的控制,而无需直接修改 Apache 的主配置文件。


由于修改php.ini的方式影响面太大,且权限要求也高,所以很多时候并不合适,且这种方式其实更适合源码部署wordpress的场景,而目前大部分的朋友都喜欢使用docker方式来部署,如果采用这种方式需要进入docker内部修改php.ini,非常的不方便。

这时候,修改”.htaccess”文件就是一个影响面小的选择了(一般服务器都允许 .htaccess 文件对 PHP 设置进行覆盖),适用场景:
1、docker方式部署的wordpress(因为docker制作的镜像是采用的Apache作为web服务器)
2、使用Apache作为web服务器源码部署wordpress且具有wordpress站点目录管理权限的朋友

在 wordpress 根目录(如果是docker方式部署,就在宿主机使用-v参数挂载到容器的”wordpress/html/”目录)下的 .htaccess 文件(隐藏文件)中添加以下行:

php_value upload_max_filesize 100M
php_value post_max_size 64M

如下图:
image.png

之后,当 Apache 服务器读取 .htaccess 文件时,它会应用这些配置,从而覆盖 php.ini 中的默认值。

注:对于源码部署wordpress的场景,修改 .htaccess这种方式只适合web服务器是Apache的情况,如果web服务器是Nginx,这种方式就不适合了,而是需要同时修改php.ini和nginx的配置文件:除了按前面的方式修改php.ini以外,还需要在nginx配置文件中的服务器块(server {})或位置块(location {})中添加或修改以下行:

client_max_body_size 64M;

然后保存文件,并重启nginx生效。

修改wordpress主题的functions.php或者通过专用插件

除了上述2种方法以外,还可以通过修改wordpress主题的functions.php文件或者使用专用插件来尝试解决上传问题。

修改主题的functions.php

该functions.php文件在使用主题的目录中,路径为”/wordpress/html/wp-content/themes/xxxxx”,
添加如下内容:

@ini_set( 'upload_max_size' , '64M' );
@ini_set( 'post_max_size', '64M');
@ini_set( 'max_execution_time', '300' );

注:这种方式未必能成功,因为在 functions.php 中通过 ini_set() 修改 PHP 配置不一定总是有效,尤其是在遇到 Web 服务器的配置限制或托管环境的约束时。为了确保上传限制能够被正确修改,通常需要直接编辑php.ini 文件和 Web 服务器的配置文件,如果使用 Docker,还需确保 Docker 容器的配置正确反映这些更改,所以,如果没成功,那也正常~。

专用插件

一些专用插件,例如”Increase Maximum Upload File Size”、”WP Upload Size”,均提供直接修改上传文件大小限制的功能,不过遗憾的是,这种方式和修改主题的functions.php文件的方式一样,也不一定会生效(因为本质上是php.ini的限制)。

终极方法:绕过PHP层面直接上传

如果说前面几种方式还算是在规则范围内办事,围绕合理合法的突破PHP的默认上传限制,剩下这种方式就是直接跳过PHP这个层面而直面问题的本质。那在wordpress的管理后台上传主题并安装的本质是什么?

从本质上来说,在wordpress里安装主题,其实就是把主题的zip包上传到”wordpress/html/wp-content/themes/”路径下,然后解压缩;如果是安装插件,是把插件的zip包是上传到”wordpress/html/wp-content/plugins/”路径下,然后解压缩;如果是上传图片,是将图片直接上传到”wordpress/html/wp-content/uploads/xxxx/xx/”路径下。

所以啊,既然本质就是这样,那直接使用各种方式(ftp、sftp、各种linux面板自带的文件上传功能等)把zip包上传到对应的位置,然后解压缩,不就行了吗?还要啥自行车?

但是,之所以把这个方法放到最后来说,就是觉得有点不太体面:没有兵来将挡、水来土掩、你来我往的感觉(就像唐伯虎和对穿肠),更像是打不过耍赖掀桌子,并且,这种方式也不适合某些wordpress的部署方式:比如虚拟主机方式部署的wordpress。

不过,总的来讲,这应该算是除了修改 “.htaccess”之外最行之有效的方法,所以,衡量了一番还是加上了这一种解决方案,大家酌情使用吧。

总结

目前看来,对于docker方式部署的wordpress来说,修改挂载文件夹根目录下的”.htaccess”文件(一般路径是宿主机的”wordpress/html/”)来突破上传文件大小限制是最方便的方法(我一直对直接去docker内部改文件这种行为很反感),当然,也适合使用Apache源码部署wordpress的场景。

除此之外,就是直接上传大法,这个没什么好说的,只要有部署wordpress主机的对应权限的都可以使用。

至于直接修改php.ini的方法,就看大家自己的实际环境吧,如果采用源码部署、且你就是主机的管理员、且觉得无所谓影响大小,那这也算是一种简单的方式。

而修改主题的 functions.php和使用专用插件这两种方式,对于那些不方便或者不想一来就修改”.htaccess”和”php.ini”的朋友来说,至少是可以先行尝试的方法:如果可以成功最好,不能成功也还有保底的可用选择。

博客内容均系原创,转载请注明出处!更多博客文章,可以移步至网站地图了解。博客的RSS地址为:https://blog.tangwudi.com/feed,欢迎订阅;如有需要,可以加入Telegram群一起讨论问题。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇
       

本站已禁用鼠标右键和各种快捷键,代码块内容可以直接在右上角点击复制按钮进行复制

zh_CN