Как сделать загрузки файла с PHP и Платформой Зенда?

Я пытаюсь сохранить свои строки ниже 80 столбцов. Самая сильная причина состоит в том, что я часто использую grep и less просматривать свой код при работе в командной строке. Мне действительно не нравится, как терминалы повреждают длинные исходные строки (они, в конце концов, не сделаны для того задания). Другая причина состоит в том, что я нахожу, что выглядит лучше, если все вписывается в строку и не повреждается редактором. Например, имея параметры долгих вызовов функции, приятно выровненных друг ниже друга и подобного материала.

10
задан Andrew 31 October 2012 в 17:12
поделиться

2 ответа

По умолчанию файлы загружаются в систему временный каталог, что означает:

  • используйте move_uploaded_file , чтобы переместить файлы в другое место,
  • или настройте каталог, в который Zend Framework должен перемещать файлы; в вашем элементе формы должен быть метод setDestination , который можно использовать для этого.

Для второго пункта есть пример в руководстве :

$element = new Zend_Form_Element_File('foo');
$element->setLabel('Upload an image:')
        ->setDestination('/var/www/upload')
        ->setValueDisabled(true);

(Но прочтите это страница: есть другая полезная информация)

12
ответ дан 3 December 2019 в 22:37
поделиться

Если бы вы переместили файл в общедоступный каталог, кто угодно мог бы отправить ссылку на этот файл кому-либо еще, и вы не можете контролировать, кто имеет доступ к файлу.

Вместо этого вы можете сохранить файл в БД как longblob, а затем использовать Zend Framework, чтобы предоставить пользователям доступ к файлу через контроллер / действие. Это позволит вам обернуть вашу собственную логику аутентификации и разрешений пользователей вокруг доступа к файлам.

Вам нужно будет получить файл из каталога / tmp, чтобы сохранить его в db:

// I think you get the file name and path like this:
$data = $form->getValues(); // this makes it so you don't have to call receive()
$fileName = $data->file->tmp_name; // includes path
$file = file_get_contents($fileName);

// now save it to the database. you can get the mime type and other
// data about the file from $data->file. Debug or dump $data to see
// what else is in there

Ваше действие в Контроллер для просмотра будет иметь вашу логику авторизации и затем загрузить строку из базы данных:

// is user allowed to continue?
if (!AuthenticationUtil::isAllowed()) {
   $this->_redirect("/error");
}

// load from db
$fileRow = FileUtil::getFileFromDb($id); // don't know what your db implementation is

$this->view->fileName = $fileRow->name;
$this->view->fileNameSuffix = $fileRow->suffix;
$this->view->fileMimeType = $fileRow->mime_type;
$this->view->file = $fileRow->file;

Затем в представлении:

<?php
header("Content-Disposition: attachment; filename=".$this->fileName.".".$this->fileNameSuffix);
header('Content-type: ".$this->fileMimeType."');
echo $this->file;
?>
3
ответ дан 3 December 2019 в 22:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: