2016-11-30 14 views
2

В контроллере symfony у меня есть файл (объект UploadedFile) в качестве переменной.использование PHP ZipArchive с файлом как переменная

Я хочу открыть эту «переменную» с помощью php ZipArchive и извлечь ее. Но методы open() ожидают строку, которая является именем файла в файловой системе. Есть ли способ обработать файл с помощью ZipArchive и без записи файловой переменной в FS?

+0

Я не думаю, что есть способ обрабатывать zip-файл в памяти с помощью класса ZipArchive. Вы всегда можете сохранить файл в tmp dir .. -> sys_get_temp_dir() – Jimmmy

+0

Спасибо, я посмотрю на него – Qonq

ответ

1

Вы можете использовать tmpfile(), чтобы создать временный файл, написать ему, а затем использовать его в zip. Пример:

<?php 

$zip = new ZipArchive(); 
$zip->open(__DIR__ . '/zipfile.zip', ZipArchive::CREATE); 

$fp = tmpfile(); 
fwrite($fp, 'Test'); 
$filename = stream_get_meta_data($fp)['uri']; 

$zip->addFile($filename, 'filename.txt'); 
$zip->close(); 

fclose($fp); 
2

Немного улучшить:

$zipContent; // in this variable could be ZIP, DOCX, XLSX etc. 

$fp = tmpfile(); 
fwrite($fp, $zipContent); 
$stream = stream_get_meta_data($fp); 
$filename = $stream['uri']; 

$zip = new ZipArchive(); 
$zip->open($filename); 
// profit! 
$zip->close(); 
fclose($fp); 

Просто не имеет смысла создавать «zipfile.zip» и добавить файл внутри, потому что у нас уже есть переменная.

 Смежные вопросы

  • Нет связанных вопросов^_^