我有一个包含字节的PHP数组,实际的字节代表一个ZIP文件(包含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文件,但它无效/已损坏。
我也试过这个,我在Stackoverflow的其他地方找到了:
$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已创建,但它无效/已损坏。
任何指针,非常感谢。
由于
答案 0 :(得分:1)
在ascii表的帮助下,您可以轻松解码您收到的数据,并且您将看到它以
开头%PDF
表示返回的数据是PDF格式,而不是zip格式。 Zip文件以PK开头,PK是格式的发明者的首字母,已故Phil Katz。
总的来说,了解常见file type signatures非常有用,可以为您节省大量时间。