更改最大上传文件大小


511

我有一个无法访问的PC上托管的网站。我有一个上传表单,允许人们上传最大30MB的mp3文件。我的服务器端脚本是用PHP完成的。

每次尝试上传文件时,都会收到一条错误消息,声称文件超出了允许的最大大小,因此我需要增加大小。我在网络上的研究建议更改.htaccess我无权访问的文件,这样将无法正常工作。其他人建议我将自定义php.ini文件添加到我的根目录中,该文件无效。还有其他建议吗?

Answers:


875

您需要设置的值upload_max_filesize,并post_max_size在你的php.ini:

; Maximum allowed size for uploaded files.
upload_max_filesize = 40M

; Must be greater than or equal to upload_max_filesize
post_max_size = 40M

修改php.ini文件后,您需要重新启动HTTP服务器以使用新配置。

如果您无法更改php.ini,那么您就不走运了。您不能在运行时更改这些值。当执行到您的调用时,大于php.ini中指定值的文件上载将失败ini_set

请参阅php.ini核心指令说明


4
您也许知道php.ini文件存储的默认路径吗?
Yo Momma

1
在Linux上,它通常位于/ etc / php /中或类似的名称中。如果您使用共享服务器,除非您的托管服务提供商足够慷慨地提供每个用户的php.ini文件,否则您将很不走运。
Johannes Gorset'2

4
如果在Windows下使用WAMP,则可以通过单击WAMP图标> PHP-> php.ini对其进行编辑。在Debian中,我的配置文件在/ etc / php5 / apache2中。
meagar

19
我建议在上设置更大的尺寸post_max_size。发布字段的整体大小可能大于文件大小,因此,如果您遇到某人上传40MB文件的情况,由于超出限制,该文件将失败post_max_size
2013年

2
请注意,memory_limit也限制了上传大小。
丹尼尔(Daniel)

151

您可以通过.htaccess文件进行更改。

.htaccess文件与文件存储在同一目录.php中。他们修改该文件夹和所有子文件夹的配置。您只需.htaccess在您选择的目录中创建一个文件即可使用它们(如果存在的话,也可以对其进行修改)。

以下内容可以使您提高上传限制(如果服务器提供商允许通过更改PHP配置.htaccess)。

php_value upload_max_filesize 40M
php_value post_max_size 42M

3
似乎并不总是有效。在我的开发机器上,在.htaccess中设置适当的值可以完成这项工作。但是在共享主机上,此设置不起作用,但是错误消息显示允许的最大上载大小是我在.htaccess中设置的值。因此,发生了非常恶劣的情况。
Eugeniu Torica 2012年

5
看起来只有在运行Apache的情况下,才将其添加到.htaccess中。试试看,对我来说很好。
AngelGris 2014年

如果php.ini中的这两行未注释,则此方法不起作用:用户定义的php.ini(.htaccess)文件的名称。默认值为“ .user.ini” ;user_ini.filename = ".user.ini" ; 要禁用此功能,请将此选项设置为空值;user_ini.filename =
Alan Deep

值得注意的是,如果您使用的是apache CGI或Fast CGI,将导致500个错误。将其包装在<IfModule mod_php7.c> </ IfModule>中
Shardj

59

我遇到了同样的问题,我创建了一个.user.ini文件,并将其放在上传脚本所在的目录中。在该文件中,我设置了以下两个值:

  upload_max_filesize = 40M

  post_max_size = 40M

对我来说很棒!


2
大。也可以启用fastcgi。需要PHP5.3或更高版本。
Ciantic

1
好的,这在共享服务器上正常工作,而其他任何方法均无效。很棒的发现。
爱德华·波特

55

您还可以使用ini_set函数(仅适用于5.3以下的PHP版本):

ini_set('post_max_size', '64M');
ini_set('upload_max_filesize', '64M');

就像@acme所说的那样,在php 5.3及更高版本中,此设置是PHP_INI_PERDIR指令,因此无法使用ini_set进行设置。您可以改用user.ini。


38
在最新的PHP版本中,这些ini设置仅是PHP_INI_PERDIR,因此无法在脚本中进行设置。有关更多详细信息,请参见此处
2013年

46

要找到ini文件,请先运行

php -i | grep -i "loaded configuration file"

然后打开文件并更改

upload_max_filesize = 2M
post_max_size = 2M

将2M替换为所需的大小,例如100M。

我也有一篇有关更多信息的博客文章http://www.seanbehan.com/how-to-increase-or-change-the-file-upload-size-in-the-php-ini- WordPress文件


5
它显示为,/etc/php5/cli/php.ini但我的配置文件为/etc/php5/apache2/php.ini。某种误导。
弗雷德里克·高斯

有2个php.ini文件...并且在回答该命令时,它向您显示您正在使用哪个文件!因此,您需要进行更改才能生效!
lewis4u

40

我过去有同样的问题..我通过.htaccess文件修复了它

当您通过php配置进行更改时,.htaccess应将配置放在 IfModule标记中,否则会发生内部服务器错误

这是一个例子,对我来说很好用:

<IfModule mod_php5.c>
   php_value upload_max_filesize 40M
   php_value post_max_size 40M
</IfModule>

如果您想了解更多,这是php参考。 http://php.net/manual/zh/configuration.changes.php


5
只要您具有覆盖功能。
AbsoluteƵERØ

3
要支持PHP.7,请添加以下相同的块:<IfModule mod_php7.c>
Mostafa

16

我通过.user.ini在PHP文件脚本所在的目录中创建一个名为的文件解决了此问题(这意味着该目录中的任何PHP脚本都会获得新的文件大小限制)

的内容.user.ini是:

upload_max_filesize = 40M
post_max_size = 40M

2
这是我的解决方案。一切正常。如果您使用的是诸如codeignitor之类的框架,则“ .user.ini”必须与index.php位于同一位置
The Dude

谢谢。那对我有用。这是共享托管的理想选择,在共享托管中您无权访问php.ini。我只想补充一点,它自PHP 5.3起可用
yacsha

6

我有同样的问题。我尝试了通常建议的三种方法:

  1. functions.php
  2. php.ini
  3. .htaccess

没有一个解决了我的问题。我正在使用Godaddy,并遇到了一个建议的解决方案,它是:

  1. 进入虚拟主机,然后管理
  2. 在“ 软件”下,选择“ 选择PHP版本”
  3. 选择表右上角以字体颜色显示的“ 切换到PHP选项”:蓝色
  4. 在最底部,您可能会拥有upload_max_filesize = 2M
  5. 现在,随时进行更改
  6. 确保单击“ 保存”按钮!
  7. 现在转到您的wp-admin面板,依次选择Media和Add

瞧!现在您有了不同的最大上传文件大小:)


6

很多次,我注意到共享共享主机的网站不允许更改php.ini文件中的设置。一个甚至都不能创建.htaac​​cess文件。在这种情况下,可以尝试以下操作

ini_set('upload_max_filesize', '10M');
ini_set('post_max_size', '10M');
ini_set('max_input_time', 300);
ini_set('max_execution_time', 300);

6

答案有点不完整,您必须做三件事

在您的php安装程序的php.ini中(请注意:取决于您是否希望它用于CLI,apache或nginx,请找到正确的php.ini进行操作。对于nginx,它通常位于/etc/php/7.1/fpm7.1取决于您的版本。对于apache通常/etc/php/7.1/apache2

post_max_size=500M

upload_max_filesize=500M

memory_limit=900M

或设置其他值。如果已安装apache,请重新启动/重新加载apache;如果使用nginx,请为nginx 重新启动php-fpm


5

好吧,我想在这里加2美分。

我正在使用共享的虚拟主机,我多次解决了这个问题,试图自己解决,但无济于事。最后,我设法通过检查各种Web来源并联系我的托管服务提供商来解决它。我的问题是“如何更改memory_limit共享虚拟主机中的php值?”,“如何更改upload_max_filesize共享虚拟主机中的php值?”,“如何更改max_input_vars共享虚拟主机中的php值?”,“如何更改共享虚拟主机中的php值” max_execution_time。共享虚拟主机?”,“如何更改max_input_time共享虚拟主机中的php值?” 以及通过配置或更改php.ini或.htaccess文件进行的更多操作。我试图更改它们,但是出现了问题。最后,我联系了托管服务提供商,结果发现我将php设置为native,他们将其更改为php 5.6,

“您的PHP设置为'本机'模式,这意味着您无法覆盖这些值。我已将您更改为'5.6',因此您应该很好。”

之后,我通过ftp Filezilla连接了我的网站,也不要忘记使ftp服务显示隐藏文件,而使本地计算机也这样做,因为.htaccess文件被隐藏在本地笔记本电脑和网站中。它在public_html文件夹中可用,我刚刚下载了它,并在文件末尾添加了以下代码,然后将其上传回服务器:

php_value memory_limit 256M
php_value post_max_size 256M
php_value upload_max_filesize 64M
php_value max_input_vars 1800
php_value max_execution_time 300
php_value max_input_time 300

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明

暂时一切正常,如果任何人克服了一些问题,请在此处写信并警告我,以便我可以更改上面显示的代码。顺便说一句,我还上传了一些显示更改的图片。

我差点忘了提到共享网络托管服务上的ZipArchive安装,我设法通过仅通过cpanel进入php设置,单击php选择器扩展,然后在zip部分打勾,就完成了这一要求。

谢谢。

PS:我愿意接受良好做法,如果您在此处看到任何不良做法,请告诉我,我将尝试更改它们。谢谢。


4

也许这应该是@ seanb123和@Fredrick Gauss对他的评论发表评论的评论,但是对我而言,在带有PHP 7的Drupal 8.1中,我需要修改的文件位于:

/etc/php/7.0/apache2/php.ini

我修改了大约四个其他的php.ini文件,包括我的系统中一个名为“已加载的配置文件”(php -i | grep -i "loaded configuration file")的文件,以及一个在info.php页面上找到的文件,但是它们都没有帮助。发现正确路径的关键是从2012年开始在一个站点上找到的。他们说,"/etc/php5/apache2/php.ini"即使返回BACK THEN,该路径也已被弃用,但这为我提供了找到路径的线索。对于PHP7,它与PHP5有所不同,但是概念是相同的。

也许这会帮助像我这样的无助的人。

话虽如此,对我而言,OP的答案是,具有管理员权限的人必须这样做。

对我有帮助的站点:http : //www.evilbox.ro/linux/remove-ispconfig-maximum-upload-size-of-2m-for-wordpress/

这也可以在这里解决: PHPMyAdmin中的导入文件大小限制

编辑:我给自己的笔记全文:

为了更改最大上传大小,请在/etc/php/7.0/apache2/php.ini(或在较旧的版本:/etc/php5/apache2/php.ini)中编辑upload_max_filesize和[如果需要?] post_max_size。

/etc/init.d/apache2重新启动

再次编辑:由于您要导入大文件,因此可能需要更改处理大文件的超时时间。以我 为例,在文件中找到了名为“ config.default.php”的文件,该文件/usr/share/phpmyadmin/libraries/config.default.php的变量$cfg['ExecTimeLimit'] = 300;我将我的变量更改为900,以进行大量导入。之后,您需要重新启动Apache


3

这些解决方案都不适合我!(默认情况下已设置为32M)。问题在大多数情况下是max_allowed_packet

我正在使用localhost并使用MAMP

这是解决方案;

1.如果你没有 my.ini

--max_allowed_packet=168435456

...\MAMP\bin\startMysql.sh

2.如果您有my.ini

[mysqld]

max_allowed_packet=100M

完成!


在php.ini和.user.ini中都添加了max_allowed_pa​​cket = 128M,这对我来说是成功的!
Molasar

2

您需要检查的三件事。

upload_max_filesizememory_limit并且post_max_size完全在php.ini配置文件中。

所有这三个设置都限制了PHP可以提交和处理的最大数据大小。

通常post_max_sizememory_limit需要大于upload_max_filesize


所以三个变量您需要检查有绝对的把握。


2

有了WAMP它,一切都很简单

WAMP 图标> PHP> PHP设置> upload_max_filesize = nM> n =(2M,4M,8M,16M,32M​​,64M,128M,256M,512M或选择(自定义))。

服务会自动重新加载。

但是,如果您确实无权访问服务器,则可能需要探索编写chunkingAPI。


0

我也遇到了这个问题,并通过在 /etc/nginx/nginx.conf

client_max_body_size 0;

0,表示无限。

而且,如果您有一个与Nginx一起运行的反向代理,则该服务器也应具有此设置(这就是让我失望的地方)


0

如果您编辑了正确的php.ini文件,重新启动了Apache或Nginx,但仍然无法正常工作,那么您也必须重新启动php-fpm

sudo service php-fpm restart 

0

由于全局更改有些冒险,因此我尝试增加单个脚本的 最大上传值big_file_upload.php。由于某种原因ini_set没有帮助。经过一番研究,我想出了这个。放入.htaccess(除非通过更改了名称AccessFileName

<If "%{REQUEST_URI} == '/subfolder/big_file_upload.php'" >
php_value upload_max_filesize 200M
php_value post_max_size 200M
</If>
<Else>
php_value upload_max_filesize 1M
php_value post_max_size 1M
</Else>

为我工作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.