php - 从 ZIP 字符串中提取文件

标签 php

我有一个包含一个 XML 文件的 zip 文件的 BASE64 字符串。

关于如何在不处理磁盘上的文件的情况下获取 XML 文件的内容有什么想法吗?

我非常希望将整个过程保存在内存中,因为 XML 只有 1-5k。

如果必须编写 zip、提取 XML,然后加载并删除所有内容,那会很烦人。

最佳答案

我遇到了类似的问题,我最终手动完成了。
https://www.pkware.com/documents/casestudies/APPNOTE.TXT

这会提取单个文件(只是第一个文件),没有错误/crc 检查,假设使用了 deflate。

// zip in a string
$data = file_get_contents('test.zip');

// magic
$head = unpack("Vsig/vver/vflag/vmeth/vmodt/vmodd/Vcrc/Vcsize/Vsize/vnamelen/vexlen", substr($data,0,30));
$filename = substr($data,30,$head['namelen']);
$raw = gzinflate(substr($data,30+$head['namelen']+$head['exlen'],$head['csize']));

// first file uncompressed and ready to use
file_put_contents($filename,$raw);

关于php - 从 ZIP 字符串中提取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15140063/

相关文章:

php - 如何获取 PHP 中最后使用的变量?

php - 当检测到多用户通过ip登录时插入随机id

mysql - 数据从一个页面调用到另一页面?

php - Laravel 模型上 Trait 中的范围查询

php - 我们应该在 Amazon MWS PHP SDK 的 APPLICATION_NAME 和 APPLICATION_VERSION 字段中输入什么?

php - 如何在 Yii 框架中绑定(bind)数组参数?

php - SQL限制返回所有结果

php - MVC : Which Model to place my code in?

php - 通过foreach循环php将数据库信息存储在多维关联数组中

php - 如何处理每页权限?