更改最大上传文件大小

Posted

技术标签:

【中文标题】更改最大上传文件大小【英文标题】:Change the maximum upload file size 【发布时间】:2011-01-12 04:10:24 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

您需要在php.ini 中设置upload_max_filesizepost_max_size 的值:

; 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,那么您就不走运了。您不能在运行时更改这些值;在执行到达您对ini_set 的调用时,上传大于php.ini 中指定值的文件将失败。

请参阅Description of core php.ini directives。

【讨论】:

你知道php.ini文件的默认存储路径吗? 在 Linux 上,它通常位于 /etc/php/ 或类似的位置。如果您在共享服务器上,除非您的托管服务提供商足够慷慨地为每个用户提供一个 php.ini 文件,否则您将不走运。 如果您在 windows 下使用 WAMP,您可以通过单击 WAMP 图标 > PHP -> php.ini 对其进行编辑。在 Debian 中,我的配置文件位于 /etc/php5/apache2。 我建议在post_max_size 上设置更大的尺寸。已发布字段的总体大小可能高于文件大小,因此如果您遇到有人上传 40MB 文件的边缘情况,则会由于超出 post_max_size 而失败。 请注意 memory_limit 也会限制上传大小。【参考方案2】:

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

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

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

php_value upload_max_filesize 40M
php_value post_max_size 42M

【讨论】:

似乎并不总是有效。在我的开发机器上,在 .htaccess 中设置适当的值就可以了。但是在共享主机上,此设置不起作用,但是错误消息显示允许的最大上传大小是我在 .htaccess 中设置的值。所以发生了一个非常奇怪的情况。 看起来像在 .htaccess 中添加这个只有在你运行 Apache 时才有效。试试吧,对我来说效果很好。 如果 php.ini 中的这两行没有被注释,这将不起作用:;用户定义的 php.ini (.htaccess) 文件的名称。默认为“.user.ini”;user_ini.filename = ".user.ini";要禁用此功能,请将此选项设置为空值;user_ini.filename = 值得注意的是,如果您使用的是 apache CGI 或 Fast CGI,这将导致 500 错误。把它包裹在 谢谢,它也适用于我的 Docker。【参考方案3】:

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

  upload_max_filesize = 40M

  post_max_size = 40M

它对我很有用!

【讨论】:

太棒了。也可以在启用 fastcgi 的情况下使用。 Requires PHP5.3 or newer. 好的,这在共享服务器上有效,而其他任何方法都不起作用。很棒的发现。【参考方案4】:

您也可以使用ini_set function(仅限PHP 5.3以下版本):

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

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

【讨论】:

在最近的 PHP 版本中,这些 ini 设置仅是 PHP_INI_PERDIR,因此您无法在脚本中设置它们。有关详细信息,请参阅here。【参考方案5】:

要找到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-file-for-wordpress

【讨论】:

它将文件显示为/etc/php5/cli/php.ini,但我的配置文件是/etc/php5/apache2/php.ini。某种误导。 有 2 个 php.ini 文件......并且在回答该命令后,它会显示您正在使用哪个!因此,您需要进行更改才能生效!【参考方案6】:

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

当您通过.htaccess 更改 php 配置时,您应该将配置放入 IfModule 标签,否则会出现Internal server error

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

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

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

【讨论】:

只要你有覆盖能力。 为了支持 PHP.7 添加相同的块: 这是一个非常重要的评论,如果没有将其包装在 ifmodule 中并指定您的 php 版本,它将无法工作!【参考方案7】:

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

.user.ini的内容是:

upload_max_filesize = 40M
post_max_size = 40M

【讨论】:

这是我的解决方案。只是工作正常。如果您使用的是 codeignitor 之类的框架,“.user.ini”需要与 index.php 位于同一位置 谢谢。这对我有用。这是共享主机的理想选择,您无法访问 php.ini。我只想补充一点,它自 PHP 5.3 起就可用【参考方案8】:

答案有点不完整,你必须做的 3 件事

在您的 php 安装的 php.ini 中(注意:根据您是否需要 CLI、apache 或 nginx,找到要操作的正确 php.ini。对于 nginx,它通常位于 /etc/php/7.1/fpm 中,其中 7.1 取决于你的版本。对于 apache 通常是/etc/php/7.1/apache2)

post_max_size=500M

upload_max_filesize=500M

memory_limit=900M

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

【讨论】:

【参考方案9】:

很多时候我注意到共享主机的站点不允许更改 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);

【讨论】:

谢谢,我忘记了超时的名称,所以这是正确的答案,因为即使您增加最大上传大小,该过程仍然会超时。【参考方案10】:

也许这应该是对@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" 甚至在那时就已被弃用,但它给了我一个线索,在哪里可以找到它。 PHP7 与 PHP5 略有不同,但概念相同。

也许这会帮助一些像我这样无助的笨蛋。

话虽这么说,在我的情况下,对 OP 的回答是必须由具有管理员权限的人来执行此操作。

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

这也在这里解决:Import file size limit in PHPMyAdmin

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

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

/etc/init.d/apache2 重启

再次编辑: 由于您正在导入大文件,您可能需要更改处理它们的超时时间。在我的例子中,名为“config.default.php”的文件位于/usr/share/phpmyadmin/libraries/config.default.php,变量$cfg['ExecTimeLimit'] = 300; 例如,为了大量进口,我将我的改为 900。 之后你需要重启apache

【讨论】:

【参考方案11】:

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

    functions.php php.ini .htaccess

如果解决了我的问题,则没有。我正在使用 godaddy 并遇到了一个建议的解决方案:

    进入虚拟主机,然后管理软件下选择选择PHP版本 选择位于表格右上角的切换到 PHP 选项,字体颜色:蓝色 在最底部,您可能会有upload_max_filesize = 2M 现在,请随意更改 一定要点击保存按钮! 现在转到您的 wp-admin 面板,选择 Media,然后选择 Add

瞧!现在你有一个不同的最大上传文件大小:)

【讨论】:

【参考方案12】:

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

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

"你的 PHP 被设置为‘native’模式,这意味着你不能覆盖 那些价值观。我已将您更改为“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:我愿意接受好的做法,如果您在这里发现任何不好的做法,请告诉我,我会尝试改变它们。谢谢。

【讨论】:

【参考方案13】:

这些解决方案都不适合我!! (已经默认设置为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

完成!

【讨论】:

将 max_allowed_pa​​cket = 128M 添加到 php.ini 和 .user.ini 中,这对我有用!【参考方案14】:

WAMP 一切都很简单

WAMP Icon > PHP > PHP Settings > upload_max_filesize = nM > n = (2M, 4M, 8M, 16M, 32M, 64M, 128M, 256M, 512M, 或选择(自定义)。

服务自动重新加载。

但是,如果您确实没有访问服务器,您可能想要探索编写chunking API。

这是一张关于如何做的图片。

【讨论】:

【参考方案15】:

您需要检查的三件事。

upload_max_filesizememory_limitpost_max_size 完全在 php.ini 配置文件中。

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

通常post_max_sizememory_limit 需要大于upload_max_filesize


所以您需要检查三个变量总计以确保绝对确定。

【讨论】:

【参考方案16】:

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

sudo service php-fpm restart 

【讨论】:

【参考方案17】:

由于全局更改有些风险,我试图增加 单个脚本 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>

为我工作。

【讨论】:

【参考方案18】:

我也遇到了这个问题,并通过在 /etc/nginx/nginx.conf 中设置此设置来修复它

client_max_body_size 0;

0,如无限制。

另外,如果你有一个使用 nginx 运行的反向代理,该服务器也应该有这个设置(这就是让我失望的原因)

【讨论】:

【参考方案19】:

    打开 php.ini 文件。

    在 php.ini 中搜索诸如 upload_max_filesize 之类的关键字。

    然后改变文件的大小。

    upload_max_filesize = 400M

    需要更改最大帖子值。

    post_max_size = 400M

【讨论】:

【参考方案20】:

花了几个小时后,我几乎浏览了所有帖子,但没有运气。最后通过这些步骤解决了问题。这可能是一个奇怪的解决方案,但对我有用。

第一步:在/etc文件夹或/文件夹下找到php.ini文件,在cmd下面运行:

grep -rl "post_max_size" | xargs ls -lrth

这里我使用 post_max_size 关键字在 /etc 文件夹中搜索“php.ini”文件,但在某些系统中,您可以在 /var/www/html 或 /var/www/wordpress 文件夹中找到它。

我们在互联网上有多个帖子,好像 WordPress 文件夹中不存在 php.ini 文件,那么您可以创建,但在我的情况下这不起作用。

第 2 步:

编辑 php.ini 文件并像这样更改值。

post_max_size = 100M   
upload_max_filesize = 100M

在上面,您可以根据需要设置任何值。

第 3 步:

重启 httpd 或者 Nginx 或者 apache 和 PHP 服务,或者按照设置,你可以重启 web 服务。

对我来说 httpd 和 php-fpm 服务重启在 centos 8 中工作:

service httpd restart
service php-fpm restart

【讨论】:

【参考方案21】:

你必须找到php的安装位置,你会看到php.ini文件

只需在任何编辑器中打开该文件并替换值

max_file_upload : 2M

【讨论】:

以上是关于更改最大上传文件大小的主要内容,如果未能解决你的问题,请参考以下文章

更改最大上传文件大小

如何更改 Shiny 中的“超出最大上传大小”限制并保存用户文件输入?

虚拟主机wordpress文件上传大小限制更改

Laravel - 超过 PHP 最大上传大小限制时验证文件大小

最大上传文件大小不反映到 phpinfo()

如何在 Spring Boot 中更改 Multipart 文件的最大大小?