В контроллере Symfony у меня есть файл (объект UploadedFile) в качестве переменной.
Я хочу открыть эту «переменную» с помощью php ZipArchive и извлечь ее.
Но методы open () ожидают строку, которая является именем файла в файловой системе. Есть ли способ обработать файл с помощью ZipArchive и без записи файловой переменной в ФС?
Ты можешь использовать 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);
Немного улучшить:
$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» и добавлять файл внутрь, потому что у нас уже есть переменная.