WordPress上传文件体积限制的解决方法

Written by

in

最新版的 WordPress 内建强大的流媒体影音平台,但值得注意的是 WordPress 却设置了文件的最大上传体积,导致诸多影音资料无法顺利上传。如果你想直到自己站点的文件上传体积限制,你可以点击 “Media”—“Add New”,在上传提示栏的旁边你可以看到“上传文件的体积限制”,一个以MB作为单位的数字。

默认情况,这个数字将会在2MB128MB之间,如果你有大容量的文件需要上传,很显然这将限制你的使用。

不幸的是,没有一种简单的方法增加最高上传文件体积限制,这取决于你服务器的设置,而本篇文章就将一步一步的告诉你如何设置来达到上述愿望。

以下大多数的步骤要求你能够进入你站点的 FTP 服务,而如果你不太熟悉 FTP 的工作原理,那么我建议你先浏览以下 Kevin Muldoon 的 guide to installing WordPress. 它会告诉你如何快捷的使用 FTP。

准备:创建一个 PHP 信息文件

在你尝试各种解决方案之前,很有必要了解以下你服务器中关于 PHP 的一些细节设置,幸运的是,PHP 有一个简单的功能可以帮助你实现上述目的。

打开文本编辑器,并在输入如下代码:

<!--?php phpinfo(); ?-->
警告:推荐使用 notepad++ Sublime Text,不要使用 Windows 自带的记事本,它编辑的东西放在 Linux 主机上执行总会遇到一些意想不到的问题

关闭保存并将其命名为“inof.php“,然后通过 FTP 上传到你服务器的 WordPress 程序所在的安装目录,然后打开浏览器,访问“http://yoursite.com/info.php”,其中将“yoursite.com” 替换成自己博客的实际地址。
如果一切正常,浏览器返回的将是对你服务器上 PHP 设置的详尽描述。

返回的信息量很大,大部分的你可以直接忽略掉,你所需要关注的是服务器上运行的 PHP 版本号,通常这个会显示在抬头用粗体字予以显示,例如上图所示的“PHP Version 5.4.16”,而最关键的就是版本号的第一个数字,如果你服务器上运行的 PHP 版本有可能是 4 或5,我们在进行下一步骤之前了解清楚这一点是非常关键的。

另外还有三项设置是有关于上传文件体积限制的,你可以观察这三项目前是如何设置的。

  • memory_limit – 它定义了 PHP 所分配到的内存空间,你只需要简单的确认这个数字比你所期望的上传限制更高就可以了;
  • post_max_size – 它规定了 POST 请求处理的最大文件体积,我们需要将这个设置成为新的上传体积限制;
  • upload_max_filesize – 它规定了上传文件最大体积,这个也将设置成为最新的上传体积限制;

现在我们已经对 PHP 设置有了初步认识后,我们将通过下面诸多方法来增加上传体积限制。

一、编辑 PHP.ini 文件

当你百度各种增加 WordPress 上传限制的方法时,会收到各种各样的回答,但最佳的方法无疑是修改服务器的 php.ini 文件设置,php.ini 文件包含了所有的 PHP 设置,你可以通过修改此文件达到自己的目的。

警告:当你决定改变服务器设定的时候,你最好备份以下站点和数据库,如果你找到了 PHP.ini 文件,在修改它之前最好也能够在本地备份一下。

你也许可以直接修改 php.ini 文件,当然这要取决于你的主机服务商。通过 FTP 登录你的站点,进到你的 WordPress 安装目录,它通常在 “html”或者“www”目录之下,而你所需要做的是进到系统的根目录下,通常位于 WordPress 安装目录之上的一到两级目录。

在你服务器的根目录下,你要开始寻找 php.ini 文件所在,通常在“conf”或“etc”目录之下,搜索这些目录直到找到名为“php.ini”的文件,如果你没办法找到,你可以联系你的主机服务商来寻求帮助。

将此文件保存在本地硬盘上,用文本编辑器打开,我们需要改变一些文件中设定的值,假设我们需要将上传限制增加到 64 MB。(你也可以将这个数值调的更高,但不建议超过 128MB

首先找到“memory_limit”一栏,将其改成 64M,然后找到“post_max_size”然后也将其改成 64M,最后,找到“upload_max_filesize”,同样将其改成64M

值得注意的是,这里我们用“M”来定义文件体积单位 megabytes,而不是通常我们所使用的“MB”。

我们还可以将“max_execution_time”这个字段设置为“300”,这将保证我们在往服务器上传大体积文件时不会出现无响应的情况,最后设置完成后应该是这样的:

memory_limit = 64M

upload_max_filesize = 64M

post_max_size = 64M

max_execution_time = 300

设置完成,保存文件,上传到服务器中并替换原有文件,然后重启服务,清空浏览器缓存,然后你再进入 WordPress 访问“Media”-“Add New”的时候你就会看到你所期望的上传体积限制了。

二、上传自己编写的 PHP.ini 文件

如果你没办法找到你的 php.ini 文件,或者你的主机不给你权限进入根目录下,你也可以自己创建 php.ini 文件然后覆盖掉原有设置。

所以我们先创建一个新文件,然后用文件编辑器打开,将如下的代码粘贴上去:

memory_limit = 64M

upload_max_filesize = 64M

post_max_size = 64M

file_uploads = On

max_execution_time = 300

同样的,我们设置为64M,但你也可以修改为任意你所需要的。

还记得刚刚我们查看的 PHP 版本么?如果你看到的是 PHP 版本4,那么你需要将这个文件保存为“php.ini”,如果你是 php 5,那么就需要将其保存为“php5.ini”了,如果你确实运行的是 PHP5 ,然后按照上述方法处理却无济于事,那么你可以保存为“php.ini”再试试。

然后,再次通过 FTP 进入系统,找到 WordPress 所在的安装目录,将这个文件覆盖上去。

设置完成,保存文件,上传到服务器中并替换原有文件,然后重启服务,清空浏览器缓存,然后你再进入 WordPress 访问“Media”-“Add New”的时候你就会看到你所期望的上传体积限制了。

三、使用 .user.ini

如果上述方法仍然不起作用,你还有一种选择,但这只对使用 PHP5 的用户奏效,如果不是,就请直接跳过本章。

创建一个新文件,将其命名为“.user.ini”,然后粘贴下面内容进去:

upload_max_filesize = 64M

post_max_size = 64M

memory_limit = 64M

max_execution_time = 300

你可以将 64M 改成其他你所期望的上传限制,然后通过 FTP 将其上传到你的 WordPress 安装目录,然后重启服务,清空浏览器缓存,然后你再进入 WordPress 访问“Media”-“Add New”的时候你就会看到你所期望的上传体积限制了。

四、尝试使用 .htaccess

如果尝试了 php.ini 的各种方法,但无疑奏效的时候,也许解决方法的金钥匙就在你的 htaccess 文件里,htaccess 被用来设设置 Apache 服务器,然后,它也可以被用来改变 PHP 设置,如果你的 PHP 版本被设置为 Apache 模式。

警告:在你开始编辑 htaccess 文件之前,请确保你已经将其备份,因为编辑这个文件的设置有可能导致服务器连接超时或者白屏,而这个时候你只需要删掉错误的 htaccess 文件,重新上传你备份过的 htaccess 文件即可。

我们进入你的 WordPress 安装目录,确保你的 FTP 客户端软件能够显示隐藏文件,然后打开一个名为“.htaccess”的文件来编辑,在文件内容的底部,添加如下代码:

php_value upload_max_filesize 64M

php_value post_max_size 64M

php_value max_execution_time 300

php_value max_input_time 300

将编辑完成的文件保存到服务器内,浏览站点,看看有没有什么错误出现。然后你重启服务,清空浏览器缓存,然后你再进入 WordPress 访问“Media”-“Add New”的时候你就会看到你所期望的上传体积限制了。

如果出现错误,你只需要将事先保存到本地的 htaccess 上传替换掉就可以了。

五、修改WordPress Config File

如果上述办法全部失败,那么还有一个办法你可以尝试,这需要你直接修改 WordPress 的设置文件。

第一步先通过 FTP 连入服务器,然后将“wp-config.php”文件保存到本地,然后用文本编辑器打开,在最后一行下面增添如下代码:

define('WP_MEMORY_LIMIT', '64M');

然后将此文件回传服务器。
然后进入“wp-content”目录进入到你目前正在使用的主题目录下,将“functions.php”保存到本地硬盘上进行编辑,在文件最上部插入如下代码:

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

这也许是最有效的解决办法,在一些旧版的服务器中,这个办法也许更有效率。