phpで複数のファイルをまとめてダウンロードしたいのですが
zipファイルがダウンロードされるのですが「無効」のアラートが出て解凍することができません。
$result = $zip->open($zipTmpDir.$zipFileName, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE);
は「true」が返ってきます。
コードのどこに誤りがあるのかわかりません。
宜しくご教授ください。
よろしくお願いします。
補足:PHP Version 7.2.20
ソースは下記の通りです。
php
1 2 $filepaths =["./data/test1.pdf","./data/test2.pdf"]; 3 4 $zip = new ZipArchive(); 5 $zipFileName = 'test_'.date('Ymd').'.zip'; 6 $zipTmpDir = __DIR__."/tmp_zip/"; 7 $result = $zip->open($zipTmpDir.$zipFileName, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE); 8 if ($result !== true) { 9 echo 'error'; 10 } 11 set_time_limit(0); 12 foreach ($filepaths as $filepath) { 13 $filename = basename($filepath); 14 // 取得ファイルをZipに追加 15 $zip->addFromString($filename,file_get_contents($filepath)); 16 //var_dump(file_get_contents($filepath)); 17 //var_dump($zip); 18 } 19 $zip->close(); 20 header('Content-Type: application/zip; name="' . $zipFileName . '"'); 21 header('Content-Disposition: attachment; filename="' . $zipFileName . '"'); 22 header('Content-Length: '.filesize($zipTmpDir.$zipFileName)); 23 echo file_get_contents($zipTmpDir.$zipFileName); 24 25 unlink($zipTmpDir.$zipFileName);
foreach内の「file_get_contents($filepath)」のdump内容(一部文字化けしています)
php
1 2/var/www/html/test/public/app/zip.php:26:string '%PDF-1.7 3%���� 429 0 obj 5<</Linearized 1/L 42903/O 31/E 38213/N 1/T 42599/H [ 456 152]>> 6endobj 7 836 0 obj 9<</DecodeParms<</Columns 4/Predictor 12>>/Filter/FlateDecode/ID[<DFC229BA4E71C747B3519DA8B95BEDE7><5A1E6FABC2C1BF43848CEEE98A8562AC>]/Index[29 21]/Info 28 0 R/Length 55/Prev 42600/Root 30 0 R/Size 50/Type/XRef/W[1 2 1]>>stream 10h�bbd``b` 11�A, 12$��D�;���f`bdXR��H�q�W���O�� 13endstream 14endobj 15startxref 160 17%%EOF 18 1949 0 obj 20<</C 73/Filter/FlateDecode/I 95/Length 68/S 38>'... (length=78802) 21/var/www/html/test/public/app/zip.php:26:string '%PDF-1.7 22%���� 2329 0 obj 24<</Linearized 1/L 42903/O 31/E 38213/N 1/T 42599/H [ 456 152]>> 25endobj 26 2736 0 obj 28<</DecodeParms<</Columns 4/Predictor 12>>/Filter/FlateDecode/ID[<DFC229BA4E71C747B3519DA8B95BEDE7><5A1E6FABC2C1BF43848CEEE98A8562AC>]/Index[29 21]/Info 28 0 R/Length 55/Prev 42600/Root 30 0 R/Size 50/Type/XRef/W[1 2 1]>>stream 29h�bbd``b` 30�A, 31$��D�;���f`bdXR��H�q�W���O�� 32endstream 33endobj 34startxref 350 36%%EOF 37 3849 0 obj 39<</C 73/Filter/FlateDecode/I 95/Length 68/S 38>'... (length=78802)
foreach内の「zip」のdumpです。
php
1/var/www/html/test/public/app/zip.php:27: 2object(ZipArchive)[1] 3 public 'lastId' => int 0 4 public 'status' => int 0 5 public 'statusSys' => int 0 6 public 'numFiles' => int 1 7 public 'filename' => string '/var/www/html/test/public/app/tmp_zip/test_20210629.zip' (length=72) 8 public 'comment' => string '' (length=0) 9/var/www/html/test/public/app/zip.php:27: 10object(ZipArchive)[1] 11 public 'lastId' => int 1 12 public 'status' => int 0 13 public 'statusSys' => int 0 14 public 'numFiles' => int 2 15 public 'filename' => string '/var/www/html/test/public/app/tmp_zip/test_20210629.zip' (length=72) 16 public 'comment' => string '' (length=0) 17
単体でのダウンロードは問題なくできます。(同じパス)
php
1 2$filepath = "./data/test1.pdf"; 3$filename = basename($filepath); 4header('Content-Type: application/force-download'); 5header('Content-Disposition: attachment; filename="'.$filename.'"'); 6header('Content-Length: '.filesize($filepath)); 7readfile($filepath); 8
回答1件
あなたの回答
tips
プレビュー