использовать PHP ZipArchive с файлом в качестве переменной

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

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

2

Решение

Ты можешь использовать 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);
1

Другие решения

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

$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» и добавлять файл внутрь, потому что у нас уже есть переменная.

2

По вопросам рекламы [email protected]