PHP的字节数组到Zip文件
问题描述:
我有一个PHP数组,其中包含字节,实际字节代表一个ZIP文件(其中包含ZIP中的多个文件)。PHP的字节数组到Zip文件
这是从第三方API返回的,所以我别无选择,只能使用此格式。
所以我想把它转换成ZIP文件。字节数组的
例通过API返回:
[bytes] => Array
(
[0] => 37
[1] => 80
[2] => 68
[3] => 70
[4] => 45
[5] => 49
[6] => -46
... continues to close to 20,000
)
我试图仅仅让浏览器通过创建一个完整的字节串,并适应浏览器标题...返回它:
foreach($bytes as $byte)
{
$byteString .= $byte;
}
header("Content-type: application/zip");
header("Content-Disposition: inline; filename='test.zip'");
echo $byteString;
这确实会创建一个zip文件,但它无效/损坏。
我也试过这个,我发现其他地方#2:
$fp = fopen('/myfile.zip', 'wb+');
while(!empty($bytes)) {
$byte1 = array_shift($bytes);
$byte2 = array_shift($bytes);
if(!$byte2) {
$byte2 = 0;
}
fwrite($fp, pack("n*", ($byte1 << 8) + $byte2));
}
close($fp);
但同样,在创建ZIP,但它是无效的/损坏。
任何指针,最感谢。
感谢
答
使用ASCII表可以很容易地您收到的数据进行解码的帮助下,你会发现它与
%PDF
这意味着,返回的数据是开始PDF格式,不是zip。 Zip文件以PK开头,该格式的发明者的缩写是Phil Katz。
作为一般说明,了解常见的file type signatures非常有用,可以为您节省大量时间。
+0
尽管API文档明确指出它会返回一个ZIP,但它确实是一个PDF。使用第二个代码示例,并将文件扩展名更改为.pdf,最终生成一个有效的PDF。然而,PDF的内容是空白的,但它具有诸如方向和大小的元数据,所以实际的“内容”缺失必须与实际的字节数据相关。谢谢你的帮助 – user1513196
它似乎极有可能使用此API错误。 – 2016-08-24 00:48:38
“看起来你使用这个API的可能性很大。” - 不,我希望我能想到!这是一个自定义的API,这确实是如何设置的。 – user1513196