PHPで、ディレクトリをまるごとZipで圧縮してダウンロードさせる仕組みを作りたいです。
リンクをクリックすることでZipで圧縮されたフォルダをダウンロードさせいたいのですが、
いくつかのサイトを参考にさせてもらったにも関わらず理解することが出来ませんでした。
現在は、中身がファイルのみであれば、Zipで圧縮してダウンロードさせることは可能です。
ディレクトリは以下のような構成のものを圧縮したいです。
test.zip
|-images
|-image1.jpg
|-image2.jpg
|-file1.php
|-file2.php
複数ファイルの入ったフォルダと、ファイルが複数枚といった構成です。
ディレクトリを階層ごと圧縮するには再帰的な処理が必要とのことなのですが、
いまいち理解ができていません。
参考になるサイト、追加すべき情報、プログラムの組み方などありましたらお教え下さい。
サンプルプログラムのような物でも構いません。
自分の使っている、中身がファイルのみでのZipで圧縮するプログラムを載せておきます。
PHP
1<?php 2//Zipクラスロード 3$zip = new ZipArchive(); 4 5//Zipファイル名指定 6$zipFileName = 'test.zip'; 7 8//Zipファイル一時保存ディレクトリ取得 9$zipTmpDir = '/phpdocs/filelesson'; 10 11//Zipファイルオープン 12$result = $zip->open($zipTmpDir.$zipFileName, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE); 13 14if ($result !== true) { 15 return false; 16} 17 18//処理制限時間を外す 19set_time_limit(0); 20 21//パス 22$fpath_array = array('images/asn.jpg','images/asn2.jpg','images/shirika.jpg'); 23 24//Zip追加処理 25foreach ($fpath_array as $filepath) { 26 //filename取得 27 $filename = basename($filepath); 28 29 //取得ファイルをZipに追加ccccccc 30 $zip->addFromString($filename,file_get_contents($filepath)); 31} 32 33$zip->close(); 34 35// ストリームに出力 36header('Content-Type: application/zip; name="' . $zipFileName . '"'); 37header('Content-Disposition: attachment; filename="' . $zipFileName . '"'); 38header('Content-Length: '.filesize($zipTmpDir.$zipFileName)); 39echo file_get_contents($zipTmpDir.$zipFileName); 40 41// 一時ファイルを削除しておく 42unlink($zipTmpDir.$zipFileName); 43exit();
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2015/08/14 06:53
退会済みユーザー
2015/08/14 07:01
退会済みユーザー
2015/08/14 07:40
退会済みユーザー
2015/08/14 08:05 編集
退会済みユーザー
2015/08/14 07:53
退会済みユーザー
2015/08/14 08:00
退会済みユーザー
2015/08/14 08:15 編集
退会済みユーザー
2015/08/14 08:29 編集
退会済みユーザー
2015/08/14 08:40 編集
退会済みユーザー
2015/08/14 08:52
退会済みユーザー
2015/08/14 09:10 編集
退会済みユーザー
2015/08/14 09:13
退会済みユーザー
2015/08/14 22:05