【PHP】めちゃ簡単!複数の画像ファイルをZIPでダウンロードさせる方法!
「画像ファイルをZIPでまとめてダウンロードさせたい!」
仕事でそんなことがあったので、備忘録も兼ねて投稿します。
プログラミングやWordPressを習得するのに一番近道な方法とは?
目次
PHPのZIPアーカイブが使えるか確認
まずはPHPのZIPアーカイブが利用できるかphpinfo()などを見て確認しましょう。
このようにenabledになっていればOKです。
ZIPの項目が無いという方はインストールしなければいけません。
下記のページを参考にZIPアーカイブをインストールしましょう。
■ PHP ZIPアーカイブインストール参考ページ
ZIP Archive のインストール | flat memo
ZIP Archive のインストール | flat memo
複数の画像ファイルをZIPでダウンロードするPHPコード
「画面でダウンロードしたい画像を何個か選択してもらって、その情報を元に画像データを入れているDBテーブルから実際の画像のファイルパスを取ってきてZIPにまとめてダウンロードさせる」という処理で使用したコードになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | // Zipクラスロード $zip = new ZipArchive(); // Zipファイル名 $zipFileName = 'hogehoge.zip'; // Zipファイル一時保存ディレクトリ $zipTmpDir = '/hoge/tmp'; // Zipファイルオープン $result = $zip->open($zipTmpDir.$zipFileName, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE); if ($result !== true) { // 失敗した時の処理 } // ここでDB等から画像イメージ配列を取ってくる $image_data_array = 【hogehoge処理】; // 処理制限時間を外す set_time_limit(0); foreach ($image_data_array as $filepath) { $filename = basename($filepath); // 取得ファイルをZipに追加していく $zip->addFromString($filename,file_get_contents($filepath)); } $zip->close(); // ストリームに出力 header('Content-Type: application/zip; name="' . $zipFileName . '"'); header('Content-Disposition: attachment; filename="' . $zipFileName . '"'); header('Content-Length: '.filesize($zipTmpDir.$zipFileName)); echo file_get_contents($zipTmpDir.$zipFileName); // 一時ファイルを削除しておく unlink($zipTmpDir.$zipFileName); exit(); |
めちゃくちゃ簡単ですね。
画像に限らず、これでZIPにバンバン入れてダウンロードさせられます。
便利な世の中です。
こちらのサイトを非常に参考にさせて頂きました。
ありがとうございます!
画像関連記事
以前の投稿でPHPで使える画像関連の小ネタもありますのでよろしければ。
ちなみに①と②は今回の投稿と同じ開発の時の小ネタです。
① 【jQuery】サイズの違う画像をキレイに並べるならwookmarkプラグインがシンプルでめちゃ簡単!
② 【PHP】画像をリサイズして生成したサムネイルをブラウザに表示させる方法
③ 知っていて損はない!?画像が読み込めなかったら別の画像を表示するjavascript!
④ [Jquery Image Zoom]画像をグリグリっとマウスオーバーで拡大するjQueryプラグインの使い方
② 【PHP】画像をリサイズして生成したサムネイルをブラウザに表示させる方法
③ 知っていて損はない!?画像が読み込めなかったら別の画像を表示するjavascript!
④ [Jquery Image Zoom]画像をグリグリっとマウスオーバーで拡大するjQueryプラグインの使い方
誰かのお役に立てればうれしいです。