Zend_Form_Element_File和“文件超出定义的ini大小”问题

时间:2013-02-06 19:11:39

标签: php zend-form zend-form-element

我正在使用Zend_Form_Element_File来验证某些文件属性。有问题的文件输入元素是动态创建的 - 即。它可以是形式,但不需要;但是,如果是,并且通过它提交了文件,则需要满足某些标准。

当表单不包含文件元素时,我遇到了“文件超出定义的大小”问题。这是预期的行为吗?

请注意,FormUpload应验证两个表单元素。 我可以使用不同的Zend_Forms,具体取决于$ _FILES数组为空(或不是),但感觉这是一个糟糕的解决方案,看到Zend_Form应该为我验证数据/数据字段。

复制问题的代码:

<?php

class FormUpload extends Zend_Form
{
    public function init()
    {
        $upload = new Zend_Form_Element_File('upload');
        $upload->setRequired(false);
        $this->addElement($upload);
    }
}

var_dump($_POST, $_FILES);
if (!empty($_POST))
{
    $form = new FormUpload();

    if ($form->isValid($_POST))
    {
        $values = $form->getValues();
        var_dump($values);
    }
    else
        var_dump($form->getMessages());
}

?>

<form method='post' enctype="multipart/form-data">
    <input type='hidden' name='something' value='something'/>
    <input type='submit' value='submit'/>
</form>

<form method='post' enctype="multipart/form-data">
    <input type='file' name='upload'/>
    <input type='submit' value='submit'/>
</form>

我将其视为一个错误 - 此问题的解决方案是始终具有带有验证名称的输入字段;否则会发生此错误。

4 个答案:

答案 0 :(得分:1)

正如我在编辑中所述:我将其视为一个错误 - 此问题的解决方案是始终使用带有验证名称的输入字段;否则会出现此错误(与此问题无关)。

答案 1 :(得分:1)

以下是您可以添加的替代方法,以覆盖Zend_Form的isValid()方法。有一个合法的错误,当没有上传文件时会产生相同的错误但它仍然试图验证。也许这会帮助那些人。

public function isValid($data) {
    $valid = parent::isValid($data);

    $errorCount = 0;
    foreach($this->getElements() as $elem) {

        if ($elem->hasErrors()) {
            $errorCount++;
        }

        // Related issues:
        // http://framework.zend.com/issues/browse/ZF-12159
        // http://framework.zend.com/issues/browse/ZF-10279
        // http://framework.zend.com/issues/browse/ZF-12189 

        if ($elem instanceof Zend_Form_Element_File && !$elem->isRequired() && !isset($_FILES[$elem->getName()]) && $elem->hasErrors()) {
            $elem->clearErrorMessages();
            $elem->setTransferAdapter( 'Http' ); // reset any errors that may be on the transfer adapter
            $errorCount--;
        }
    }

    if ($this->_errorsForced) {
        return false;
    }

    if ($errorCount==0) {
        $this->_errorsExist = false;
    }

    return $errorCount==0;
}

答案 2 :(得分:1)

你应该在php.ini中更改upload_max_filesize = 10M(不在Zend中)。例如,您可以通过右键单击wamp / php / php.ini在Wamp中访问此文件。 它对我有用。

答案 3 :(得分:0)

Zend_Form_Element_File会将最大文件大小添加到post_max_size。如果设置了upload_max_filesize,它将设置为。

改变你的需要:

$upload->setMaxFileSize($newSize);

但是如果没有设置set或post_max_size upload_max_filesize,你可以使用的较大尺寸是upload_max_filesize。

要更改那些编辑你的php.ini或.htaccess。