php - 在内存中下载并解压缩 zip 存档

标签 php zip unzip

我想下载一个 zip 存档并使用 PHP 将其解压缩到内存中。

这就是我今天所拥有的(这对我来说太多了文件处理:)):

// download the data file from the real page
copy("http://www.curriculummagic.com/AdvancedBalloons.kmz", "./data/zip.kmz");

// unzip it
$zip = new ZipArchive;
$res = $zip->open('./data/zip.kmz');
if ($res === TRUE) {
    $zip->extractTo('./data');
    $zip->close();
}

// use the unzipped files...

最佳答案

警告:这不能在内存中完成 — ZipArchive 不能使用“内存映射文件”

您可以使用file_get_contentsDocs 将zip 文件中的文件数据获取到变量(内存)中。因为它支持 zip:// Stream wrapper Docs :

$zipFile = './data/zip.kmz';     # path of zip-file
$fileInZip = 'test.txt';         # name the file to obtain

# read the file's data:
$path = sprintf('zip://%s#%s', $zipFile, $fileInZip);
$fileData = file_get_contents($path);

您只能使用 zip:// 或通过 ZipArchive 访问本地文件。为此,您可以先将内容复制到一个临时文件并使用它:

$zip = 'http://www.curriculummagic.com/AdvancedBalloons.kmz';
$file = 'doc.kml';

$ext = pathinfo($zip, PATHINFO_EXTENSION);
$temp = tempnam(sys_get_temp_dir(), $ext);
copy($zip, $temp);
$data = file_get_contents("zip://$temp#$file");
unlink($temp);

关于php - 在内存中下载并解压缩 zip 存档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7391969/

相关文章:

c# - 压缩包 : Can I rename or move a ZipArchiveEntry?

javascript - 以特定格式将 mysql 数据检索到 javascript 时出现问题

php - 加入不起作用

php - 对一个模型使用 2 个查询或 1 个查询并将其转为数组方法以获取其他查询

python - 如何使用 Python 将文件压缩为受密码保护的存档

c# - 如何在不使用任何 OpenSource Dll 的情况下使用 C# 4.0 从文件夹中解压所有 .Zip 文件?

java - 使用 JAVA 中的输入流解压缩加密的 zip 文件

windows - 使用批处理文件静默提取 zip 文件

unzip - 无法使用 Ansible 解压位于远程 centos 机器上的文件

php - 如何让 Aptana 在 .php 文件中显示 Laravel 语句颜色(支持 Laravel)?