使用 PHP ZipArchive 并将文件作为变量
use PHP ZipArchive with file as variable
在 symfony 控制器中,我有一个文件(UploadedFile 对象)作为变量。
我想用 php ZipArchive 打开这个 "variable",然后解压缩。
但是 open() 方法需要一个字符串,它是文件系统中的文件名。有什么方法可以使用 ZipArchive 处理文件而不将文件变量写入 FS?
您可以使用 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" 并在其中添加文件是没有意义的,因为我们已经有了一个变量。
在
查看此答案
有一种方法可以创建仅驻留在内存中的文件。
在 symfony 控制器中,我有一个文件(UploadedFile 对象)作为变量。
我想用 php ZipArchive 打开这个 "variable",然后解压缩。 但是 open() 方法需要一个字符串,它是文件系统中的文件名。有什么方法可以使用 ZipArchive 处理文件而不将文件变量写入 FS?
您可以使用 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" 并在其中添加文件是没有意义的,因为我们已经有了一个变量。
在
有一种方法可以创建仅驻留在内存中的文件。