Загрузка файла с помощью Zend Framework не работает без ошибок

Я злюсь на ошибку, больше похожую на отсутствие ошибки, которую я не понимаю. Я пытаюсь загрузить файл в каталог через Zend_Framework.

Здесь мой php:

if (($this->_request->getPost('file_upload', false))) {
 if ($this->view->form->isValid($_POST)) {
 $data = $this->view->form->getValues();
 Zend_Debug::dump($data);
 if (!file_exists(APPLICATION_PATH . "/../docs_client")) {
 mkdir(APPLICATION_PATH . "/../docs_client");
 }
 if (!file_exists(APPLICATION_PATH . "/../docs_client/" . $id . "/" . $data['annonce_id'])) {
 mkdir(APPLICATION_PATH . "/../docs_client/" . $id . "/" . $data['annonce_id'], 0700, true);
 }
 $dirName = APPLICATION_PATH . "/../docs_client/" . $id . "/" . $data['annonce_id'] . '/';

 $adapter = new Zend_File_Transfer_Adapter_Http(); 
 $adapter->setDestination($dirName);
 if ($data['accord'] != NULL) {
 $accord = $adapter->getFileInfo('accord');
 Zend_Debug::dump($accord);
 $accordInfo = $accord['accord'];
 $name = $accordInfo['name'];
 $extension = pathinfo($accordInfo['name'], PATHINFO_EXTENSION);
 $fname = "accord_bailleur_" . $id . "_" . $data['annonce_id'] . '_' . uniqid() . '.' . strtolower($extension);
 $adapter->addFilter(new Zend_Filter_File_Rename(array(
 'target' => $fname, 
 'overwrite' => true
 )), null, $accord);

 if (!$adapter->receive($accord)){

 //die ( print_r ( $adapter->getMessages (), 1 ) );
 }
 Zend_Debug::dump($fname);
 //Zend_Debug::dump($accord);die();
 }

 }
 }

В моей zend-форме я установил valueDisabled в true. В моей html-форме я установил enctype как "multipart/form-data",

Когда я пытаюсь загрузить файл, каталоги создаются, если они отсутствуют, все враги, как это предполагалось, за исключением того, что мой файл не загружается. У меня ничего нет в моем каталоге temp или каталоге загрузки, который я установил. Когда я пытаюсь отобразить ошибки, у меня есть пустой массив.

Здесь моя отладка:

/* POST DATA */
array(4) {
 ["accord"] => string(36) "0b4f7b468ad649ccbe8d2c78d3f50389.pdf"
 ["loyer"] => NULL
 ["justificatif"] => NULL
 ["annonce_id"] => string(3) "337"
}

/* CONTENT OF $accord*/
array(1) {
 ["accord"] => array(11) {
 ["name"] => string(36) "0b4f7b468ad649ccbe8d2c78d3f50389.pdf"
 ["type"] => string(15) "application/pdf"
 ["tmp_name"] => string(27) "C:\Windows\Temp\phpE10B.tmp"
 ["error"] => int(0)
 ["size"] => string(7) "3258008"
 ["options"] => array(4) {
 ["ignoreNoFile"] => bool(false)
 ["useByteString"] => bool(true)
 ["magicFile"] => NULL
 ["detectInfos"] => bool(true)
 }
 ["validated"] => bool(false)
 ["received"] => bool(false)
 ["filtered"] => bool(false)
 ["validators"] => array(1) {
 [0] => string(25) "Zend_Validate_File_Upload"
 }
 ["destination"] => string(86) "C:\Program Files (x86)\Zend\Apache2\htdocs\esubletz1\application/../docs_client/17/337"
 }
}
/* CONTENT OF $fname*/
string(40) "accord_bailleur_17_337_5224634612c1d.pdf"

У меня более или менее одинаковый код для другой загрузки файла, и он отлично работает.

Я не понимаю, почему этого нет.

2 ответа

Ну, после всего этого времени ошибка была в том, что в

$adapter->addFilter(new Zend_Filter_File_Rename(array(
 'target' => $fname, 
 'overwrite' => true
 )), null, $accord);

 if (!$adapter->receive($accord)){

 //die ( print_r ( $adapter->getMessages (), 1 ) );
 }

$ accord не должен быть массивом, а строка имени этого массива, в этом случае "согласен". И как каждый раз, когда я нахожу ошибку сразу после того, как я публикую здесь.


Используйте этот простой и простой пример при загрузке файла rob, он будет очень полезен и предоставит вам правильный способ и подход к загрузке файлов в ZF.

http://akrabat.com/zend-framework/simple-zend_form-file-upload-example/

licensed under cc by-sa 3.0 with attribution.