PHP получает файл в виде байтового массива, используя Zend_Form - PullRequest
3 голосов
/ 14 марта 2012

Мы используем Zend_Form внутри PHP-приложения для создания html-элемента входного файла.Мы можем установить «назначение» этого элемента, и при вызове receive () файл будет сохранен в указанном месте.

Мы хотим иметь возможность вообще не сохранять файл на диск, а захватыватьфайл в виде байтового массива и делать с ним что-то еще.

Возможно ли это?Если это невозможно с Zend_Form (), можно ли это сделать каким-либо иным способом?

РЕДАКТИРОВАТЬ. Причина, по которой мы не можем записать на диск, заключается в том, что приложение работает в Azure, и кажется, что оно не имеетПрава доступа на запись куда угодно, даже не во временную папку.Zend получает исключение, говорящее, что «данный пункт назначения недоступен для записи».

Ответы [ 2 ]

2 голосов
/ 15 марта 2012

Единственное, что кажется жизнеспособным, - это сохранить файл с использованием протокола php://memory.

У меня никогда не было причин для реализации, но это выглядит просто, как установка местоположения сохранения файла на php://memory, вот ссылка на страницу руководства PHP I / O Wrappers .

1 голос
/ 16 марта 2012

Все загрузки PHP записываются в файловую систему независимо от того, используется Zend или нет (см. upload_tmp_dir и POST метод загрузки ).

Файлы будутпо умолчанию хранится во временном каталоге по умолчанию на сервере, если в директиве php.ini не указано иное расположение с *1009*.

Вместо использования receive для обработки загрузки, попробуйтепрямой доступ к нему с помощью массива $_FILES, который позволит вам прочитать файл в строку, используя file_get_contents () или аналогичные функции.Однако вы все равно можете использовать Zend_Form для создания и обработки формы в целом.

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

В конечном счете, Zend_File_Transfer_Adapter_Http::receive() вызывает move_uploaded_file () переместить файл из его временного местоположения в постоянное местоположение.Кроме того, он проверяет, что загрузка действительна, фильтрует ее и помечает как полученную, чтобы ее нельзя было переместить снова (поскольку это может привести к сбою).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...