Zend文件上传:文件超出定义的ini大小

时间:2011-06-23 07:12:02

标签: php file-upload zend-form

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

$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'));

但是,无论我上传的文件有多小,我都会收到此错误:文件“徽标”超出了定义的尺寸。

错误消息似乎非常简单,所以我检查了php配置(phpinfo()在处理表单的同一页上)

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

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

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

更新:我非常抱歉浪费了你的时间,页面上有另一个未公开的表格,这使得多部分声明无效。如果我使用较大的文件而不是小文件进行测试,可能会更早发现:/

8 个答案:

答案 0 :(得分:14)

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

答案 1 :(得分:6)

添加

enctype="multipart/form-data"

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

答案 2 :(得分:3)

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

答案 3 :(得分:2)

有可能没有激活php扩展文件信息。

答案 4 :(得分:1)

看起来你错过了目的地:

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

您可能希望确保该文件夹可由Web服务器写入。

答案 5 :(得分:1)

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

->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

分别对文件上传进行了评论

所以我取消评论它,这一切都再次奏效。

答案 6 :(得分:1)

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

答案 7 :(得分:0)

您的尺码验证工具不正确。您应该使用以下格式:

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

验证器检查文件大小== 5242880,不是&lt; = 5242880。