Intereting Posts

Zend_Form_Element_File и «Файл превышает заданный размер ini»

Я использую 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> 

Я бы рассматривал это как ошибку – решение этой проблемы – всегда иметь поле ввода с подтвержденным именем; в противном случае это произойдет.

Как я уже сказал в редакции: я бы рассматривал это как ошибку – решение этой проблемы – всегда иметь поле ввода с подтвержденным именем; в противном случае эта ошибка произойдет (что не имеет ничего общего с проблемой).

Вот обходной путь, который вы можете добавить, чтобы переопределить метод isValid () Zend_Form. Существует законная ошибка, которая генерирует ту же ошибку, когда файлы не загружаются, но все равно пытается все равно проверить. Может быть, это поможет кому-то там.

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

Zend_Form_Element_File добавит максимальный размер файла в post_max_size. если параметр upload_max_filesize установлен, он будет установлен на это.

для изменения вам необходимо:

 $upload->setMaxFileSize($newSize); 

Но более крупный размер, который вы можете использовать, – upload_max_filesize, если set или post_max_size upload_max_filesize не установлен.

Чтобы изменить их, отредактируйте свои php.ini или .htaccess.

Вы должны изменить upload_max_filesize = 10M в php.ini (не только в Zend). Например, вы можете получить этот файл в Wamp, щелкнув правой кнопкой мыши на wamp / php / php.ini. Это сработало для меня.