问题描述
我在尝试从具有多个带有 MIME 边界的附件的 HTTP POST 请求中读取数据时遇到问题:
----MIME_boundary
内容类型:text/xml;字符集=UTF-8
内容传输编码:8 位
内容 ID:
xml 数据
----MIME_boundary
内容类型:应用程序/zip
内容传输编码:二进制
Content-disposition:附件;文件名="test.zip"
内容 ID:
PK (二进制/ASCII 数据)
----MIME_boundary--
我使用在这篇文章的帮助下编写的函数将请求拆分为我需要的数据:Manually parse raw multipart/form-data data with PHP
基本上,我已经能够获取该 zip 文件的二进制文件,然后将其提供给我编写的另一个函数,该函数应该能够从二进制文件创建一个临时 zip 文件,然后我可以使用 ZipArchive PHP 中的类来读取并返回该 zip 文件中所有文件的列表。
public static function unzip($zipBinary) {
$zip = new ZipArchive;
// create temp file from given binary
$file = tempnam("tmp","zip");
file_put_contents($file,$zipBinary);
$res = $zip->open($file,ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE);
if ($res === TRUE) {
$files = [];
// create array of files from zip
for ($i = 0; $i < $zip->numFiles; $i++) {
$files[$zip->getNameIndex($i)] = $zip->getFromIndex($i);
}
$zip->close();
// delete temp file
unlink($file);
return $files;
}
}
我一直遇到但似乎终生无法解决的问题是,使用 file_put_contents 创建的 zip 文件似乎根本不起作用。当我尝试计算文件数时,我得到 0。我不确定这是否是我被要求设置 REST 端点的示例请求中的二进制文件的问题,或者它是否是我的代码的问题.
我尝试了几种不同形式的调试 - 我已经通过查看 file_put_contents() 的返回值测试了 zip 文件实际上正在填充,并且我还尝试在临时文件上使用 rename()将它放在与我的脚本相同的目录中,以查看 zip 文件是否有效并且可以打开 - 事实并非如此,我在尝试打开它时收到“不支持的格式”错误 - 我也尝试用文本打开它编辑无济于事。我可能会尝试将不同的 zip 文件转换为二进制文件,并在我发布完这篇文章后尝试查看是否遇到相同的问题。
如果有人能指出我正确的方向并让我知道这是否是二进制文件的问题(以及我如何可能解决它),或者我是否可以更改代码以缓解该问题,我将不胜感激。
我从许多不同的 google/stackoverflow 搜索中尝试了许多不同的东西,但没有成功,并认为我会在这里发帖作为最后的手段。
谢谢
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)