【问题标题】:Change the maximum upload file size更改最大上传文件大小
【发布时间】:2020-07-07 06:40:19
【问题描述】:

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

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

【问题讨论】:

    标签: php


    【解决方案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.
    • 好的,这在共享服务器上有效,而其他任何方法都不起作用。很棒的发现。
    • 我花了一些时间才弄清楚它是 .user.ini 而不是 user.ini
    【解决方案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】:

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

        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

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

        【讨论】:

          【解决方案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】:
                      1. 打开 php.ini 文件。

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

                      3. 然后改变文件的大小。

                        upload_max_filesize = 400M

                      4. 需要更改最大帖子值。

                        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
                          
                          

                          【讨论】:

                            猜你喜欢
                            • 2017-08-01
                            • 2011-09-28
                            • 1970-01-01
                            • 1970-01-01
                            • 2020-08-13
                            相关资源
                            最近更新 更多