PHP:複数枚の画像をZIPに圧縮してダウンロードする
複数枚の画像をZIPに圧縮してダウンロードするPHP
親会社のWEBカタログ作成時にハマったので備忘録的メモ。
参考にさせて頂いたサイトさんのテキストが間違えていまして、自分で書いてないのでその事に気づかず、延々悶々としていたという…。まぁよくある事ですね。
画像をZIP化してダウンロードするスクリプト
流れは以下の通り
- ダウンロードする画像を選択しDL用ページへPOST送信
- DL用ページでPOST受取
- new ZipArchive() で空のzipファイルを作成
- zip化するパーツに addFile で データを追加
- zip化するパーツをcloseする
- header でダウンロード指示
- 作成したzip を削除する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
//配列 $pict の中身 $pict[] = dirname(__FILE__)."/image/〇〇〇.jpg"; $pict[] = dirname(__FILE__)."/image/△△△.jpg"; $pict[] = dirname(__FILE__)."/image/■■■.jpg"; $pict[] = dirname(__FILE__)."/image/◇◇◇.jpg"; //画像パスを配列でPOST //inputをつくる foreach($pict as $row){ $d_list[] = '<input type="hidden" name="p_path[]" value="'.$row.'">'; } //作成したinputを文字列にする $PPATH = implode("\n",$d_list); //form タグを作成 $DL_LIST = '<form method="POST" action= "d_pict.php" target="blank">'."\n" .$PPATH. '<input type="submit" value="画像ダウンロード">'."\n0" . '</form>'."\n"; //作成した foam をコール echo $DL_LIST; |
受取:d_pict.php
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 40 41 42 43 44 45 46 47 |
<?php //POSTの取得 $pict = $_POST['p_path']; //後のためにPOSTされた配列の数を数える $ct = count($pict); //パスやファイル名の設定 $zip_name = 'pict_zip_'.date('Ymd').'.zip'; $zip_tmp_dir = dirname(__FILE__).'/tmp_zip/'; //ZIPデータの作成 //--------------------------------------------- //ZipArchiveインスタンス作成 $zip_obj = new ZipArchive(); $result = $zip_obj -> open($zip_tmp_dir.$zip_name, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE); if(!$result){ echo 'error code : '.$result; exit(); } //zipにまとめたいファイルのパスとzip内でのファイルパスを配列にまとめる for ($i = 0; $i < $ct; $i++) { $fname = "画像名".'_'.$i.'.jpg'; $files[] = array('zip_path' => $fname,'file_path' => $path); } //zip ファイルに画像を追加する foreach ($files as $file){ $zip_obj -> addFile($file['file_path'], $file['zip_path']); } //zip ファイルを閉じる $zip_obj -> close(); //ダウンロード指示 //--------------------------------------------- header('Content-Type: application/force-download;'); header('Content-Length: '.filesize($zip_tmp_dir.$zip_name)); header('Content-Disposition: attachment; filename="'.$zip_name.'"'); readfile($zip_tmp_dir.$zip_name); //作成したサーバー内のzipを削除 //--------------------------------------------- unlink($zip_tmp_dir.$zip_name); ?> |
人の書いたコードをパクろうとしたため、作成したZIPのパスとダウンロード指示で書いてるZIPのパスが違うというお手本のミスをそのまま引き継ぎ延々と空のZIPがダウンロードされ大ハマり。
大体ね、script組んでてハマる時ってちっちゃなミスに気付かない時なんだよね。
次回からは気を付けます。はい。
-
前の記事
PHP:日付をタイムスタンプに変換する関数 2018.09.03
-
次の記事
楽天API:R-Cabinet 残り容量等の確認 2018.09.06
コメントを残す