2

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

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

请记住,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

4 回答 4

1

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

于 2014-01-28T10:10:03.730 回答
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;
}
于 2015-09-09T06:11:11.397 回答
1

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

于 2017-04-07T11:38:19.217 回答
0

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

要改变你需要:

$upload->setMaxFileSize($newSize);

但是如果设置或 post_max_size upload_max_filesize 未设置,您可以使用的较大大小是upload_max_filesize。

要更改这些,请编辑您的 php.ini 或 .htaccess。

于 2013-02-06T19:18:03.557 回答