Как установить путь для загружаемых файлов с помощью Zend Framework? - PullRequest
0 голосов
/ 07 марта 2012

Я пытаюсь загрузить видео и конвертировать его в php, используя Zend Framework, и у меня есть небольшая проблема с моей логикой.

У меня есть каталог, локально, который должен содержать загруженные файлы:

C:/xampp/htdocs/zend/videos/

Сначала мне нужно конвертировать видео, затем переместить его в этот каталог.

Для преобразования я использую что-то вроде этого:

exec("ffmpeg -i video.avi -ar 22050 -ab 32 -f flv -s 320x240 video.flv", $out);

вот часть моей формы:

$file = new Zend_Form_Element_File('file');
    $file->setLabel('File')
        ->setRequired(true)
        //->setDestination('/var/www/tmp') use in real life
        ->setDestination('C:/xampp/htdocs/zend/tmp')
        ->addValidator('Size',
                false,
                array('min' => '10kB', 'max' => '100MB'));

когда я загружаю файл, он просто отлично попадает в этот каталог.

Нужно ли конвертировать файл в каталоге tmp, а затем переместить его в другой основной каталог, а затем удалить исходный?

Нет ли способа сохранить исходный файл ввременный каталог временный, пока он не будет преобразован, а затем он автоматически удалит себя?

Я пытаюсь также использовать Zend_File_Transfer_Adapter_Http, но я немного запутался, в чем разница между setDestination и target из фильтра Rename и при необходимости его использования.

я дома, кто-то может пролить свет на эту проблему, может быть, некоторые лучшие практики.

Спасибо

1 Ответ

0 голосов
/ 07 марта 2012

Я также пытаюсь использовать Zend_File_Transfer_Adapter_Http , но я немного путать в чем разница между setDestination и цель из фильтра Rename и, если необходимо, использовать его.

setDestination() устарел, и вместо него следует использовать фильтр Rename. Если у вас установлен фильтр Rename, он переопределит пункт назначения. В противном случае, нет большой разницы. Основное отличие состоит в том, что фильтр Rename может переименовывать файл, где setDestination сохраняет исходное имя файла, как оно было на ПК пользователя, и только перемещает его в место назначения. Это может привести к тому, что существующие файлы будут перезаписаны или кто-то может разбить файл другого пользователя, если вы не дадите им аккуратного названия.

Нужно ли конвертировать файл в каталог tmp и затем переместить его в мой другой основной, а затем удалить оригинальный?

Лично я бы не пытался конвертировать файл по мере его загрузки. Хотя преобразование может быть быстрым во многих случаях, что произойдет, если было загружено относительно большое видео, и для его кодирования потребуется еще 4 минуты? Вы не хотите, чтобы пользователь завис в ожидании, задаваясь вопросом, что происходит во время преобразования.

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

Если вы хотите конвертировать видео на лету по мере их загрузки, я могу даже не использовать Zend_File_Transfer_Adapter_Http вообще. Вместо этого используйте $_FILES superglobal для доступа к $_FILES['videofile']['tmp_name'] и попросите ffmpeg преобразовать этот файл и просто записать вывод в конечный пункт назначения или временный пункт назначения, а затем переместить его после завершения преобразования. Файлы, загруженные в PHP, автоматически удаляются, когда запрос завершается, если вы не позвоните move_uploaded_file или не сделаете что-нибудь вручную, чтобы записать временный файл в постоянное местоположение.

Нет ли способа сохранить оригинальный файл во временном каталоге временно, пока он не будет преобразован, а затем он будет автоматически удалить себя?

Да, если вы идете без Zend_File_Transfer. Загруженный файл автоматически находится во временном каталоге до тех пор, пока не закончится запрос PHP Если вы выполняете преобразование на лету, исходный временный файл автоматически удаляется после завершения работы PHP.

Надеюсь, это немного прояснит для вас.

...