【问题标题】:Zend File upload: File exceeds the defined ini sizeZend 文件上传:文件超出定义的ini大小
【发布时间】:2011-09-20 23:43:28
【问题描述】:

在我的表单中,我定义了这个文件上传字段:

$this->setEnctype(Zend_Form::ENCTYPE_MULTIPART);

$logo = $this->createElement('file', 'logo');
$logo->setLabel('Group logo')
     ->setMaxFileSize(5242880) // 5mb
     ->addValidator('IsImage')
     ->addValidator('Count', false, 1)
     ->addValidator('Size', false, 5242880)
     ->addValidator('Extension', false, array('jpg', 'jpeg', 'png', 'gif'));

但是,无论我上传多么小的文件,我都会收到此错误:文件 'logo' 超出了定义的 ini 大小。

错误消息看起来很简单,所以我检查了 php 配置(phpinfo() 在处理表单的同一页面上)

  • file_uploads:开启
  • upload_max_filesize: 2000M
  • memory_limit:128M
  • post_max_size: 8M

虽然这些值并不完全有意义,但它们绝对应该允许我上传高达 8Mb 的文件,但上传总是失败并显示上面的消息。即使文件小于 1Kb 也会失败。我也尝试删除所有设置器/验证器,但仍然失败。

在寻找答案时,我发现一些帖子说这是 ajax 的错,但这是一种常规形式,所以现在我被卡住了。

更新:非常抱歉浪费了您的时间,页面上还有另一个未封闭的表格使多部分声明无效。如果我用更大的文件而不是小文件进行测试,本可以更快地发现这一点:/

【问题讨论】:

    标签: php file-upload zend-form


    【解决方案1】:

    在您的表单中添加enctype="multipart/form-data"。它应该可以解决您的问题。

    【讨论】:

    • 我在 html 源代码中添加了$this->setEnctype(Zend_Form::ENCTYPE_MULTIPART);(参见我的第一篇文章),转换为:
      (这就是源代码中的实际内容,所以这也不应该是问题)
    • 这个答案为我解决了。我忘了添加enctype="multipart/form-data",当我添加时,文件元素开始正常运行。
    • 非常感谢,我总是不得不忘记这一点;)
    【解决方案2】:

    添加

    enctype="multipart/form-data"
    

    到您的<form> 元素。解决了我的问题。

    【讨论】:

      【解决方案3】:

      如果您使用脚本文件来呈现文件,则需要从脚本文件中检索您在表单类中指定的编码类型信息。 <form enctype="<?php echo $this->element->getAttrib("enctype"); ?>">

      【讨论】:

        【解决方案4】:

        可能是 php 扩展文件信息未激活。

        【讨论】:

          【解决方案5】:

          请检查您的 php.ini 文件并增加upload_max_filesize。默认情况下,它是 2M(2 兆字节)。此外,为了能够发布大小超过 2M 的文件,您需要更新 post_max_size 的值

          【讨论】:

            【解决方案6】:

            您好像错过了目的地:

            $logo->setLabel('Group logo')
                 ->setDestination('/var/www/upload')
                 ...
            

            您可能需要确保您的网络服务器可以写入该文件夹。

            【讨论】:

            • 嗯,很有趣。我刚刚添加了它,现在什么也没有发生 - 上传验证失败,但没有错误消息。我将其设置为 chmodded 为 777(使用绝对路径)的目录,所以这应该不是问题。
            • @skooli - 您应该尝试在文件中添加ini_set('display_errors', true);error_reporting(E_ALL);,以防错误被抑制。可能还有其他问题。
            • 它已经设置为 E_ALL 但我提交文件时没有错误
            • 注意: ->setDestination('/var/www/upload') 已弃用,请改用 ->addFilter('Rename', '/new/destination/path')
            【解决方案7】:

            当我注释掉以下内容时,我得到了同样的错误:

            ->setDestination($this->_config->folder->ugc);
            ->addValidator(Kvadrat_Form_Element_File::VALIDATE_COUNT, true, 1);
            ->addValidator(Kvadrat_Form_Element_File::VALIDATE_SIZE, true, 5 * 102400);
            

            (我把它注释掉了,就像用FormData单独上传文件一样)

            所以我取消了它的注释,然后一切都恢复了。

            【讨论】:

              【解决方案8】:

              您的尺寸验证器不正确。你应该使用这种格式:

              ->addValidator('Size', false, array('max' => '5242880'))
              

              您的验证器检查文件的大小 == 5242880,而不是

              【讨论】:

              • 刚试了,没搞定。它不是触发消息的当前验证器,正如我所说,我尝试删除所有验证器,但问题仍然存在
              • 是的。对不起。请参阅我的另一个答案。
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-08-20
              • 1970-01-01
              • 1970-01-01
              • 2011-07-06
              • 2015-01-20
              • 2015-03-17
              相关资源
              最近更新 更多