我正在使用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>
我将其视为一个错误 - 此问题的解决方案是始终具有带有验证名称的输入字段;否则会发生此错误。
答案 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。