2016-08-24 9 views
2

私はバイトを含むPHP配列を持ち、実際のバイトはZIPファイル(ZIP内に複数のファイルを含む)を表します。ZIPファイルへのPHPの配列

これはサードパーティの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

このAPIを誤って使用している可能性が高いようです。 –

+0

"このAPIを使用している可能性は非常に高いようです。 - いいえ、私は思ったのですが!これはカスタムAPIであり、実際にどのように設定されているかです。 – user1513196

答えて

1

それはあなたが受信しているデータをデコードするのは簡単だし、あなたはそれが返されたデータが入っていることを意味している

%PDF 

で始まっていることがわかりますPDF形式で、zip形式ではありません。 Zipファイルは、PKの書式の発明者の頭文字であるPhil Katzで始まります。

一般的な注意として、共通のfile type signaturesについて知っていることは非常に便利であり、多くの時間を節約できます。

+0

APIドキュメントではZIPを返すと明示していますが、確かにPDFです。 2番目のコード例を使用し、ファイル拡張子を.pdfに変更すると、有効なPDFが得られます。ただし、PDFの内容は空白ですが、向きやサイズなどのメタデータがあるため、実際の「内容」の欠落は実際のバイトデータで問題になるはずです。ご協力いただきありがとうございます – user1513196

関連する問題