更改最大上传文件大小
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_filesize
和post_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 错误。把它包裹在 我遇到了同样的问题,我创建了一个 .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 添加相同的块:我通过在 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 文件中的设置。甚至根本无法创建 .htaaccess 文件。在这种情况下,可以尝试以下操作
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_packet = 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_filesize
、memory_limit
和 post_max_size
完全在 php.ini 配置文件中。
所有这三个设置都限制了 PHP 可以提交和处理的最大数据大小。
通常post_max_size
和memory_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 中的“超出最大上传大小”限制并保存用户文件输入?