PHP テキストファイルなどをZipにしてまとめてダウンロードさせる方法

公開: 2016-10-28 07:42

どうもこんにちはあっきぃです。

相変わらず週末はやることがないので散歩に興じております。

この前の土曜日はぼーっと歩いていたら20kmくらい歩いていました。

(iPhoneのヘルスケアで歩数や移動距離が勝手に記録されるので、iPhoneユーザーの方は確認してみると意外と歩いていたりするものですぞよ。ふぉっふぉっふぉ。)


さて、画像ファイルやテキストファイル(というかJSONファイル)、
などなどをクリック一つでまとめてDLさせると、なんか使いやすいツールが爆誕したりします。

そこで今回はみんな大好きPHPでそんな機能を作ってみようのコーナーです。以外と簡単です。



PHPで複数のファイルをZIPにする

多分ある程度バージョンのいったPHPなら使えるはずの「ZipArchive」を使います。


もう一気にコードをしめしちゃいますねー

// zip_download.php

$zip = new ZipArchive();

$zipDir = '/var/www/html/tmp/'; // zipファイルを一時的に作る場所。
$zipName = date("Y-m-d-Hi").'.zip'; // ex 2016-12-24-0615.zip みたいな名前になります。

// 書き込み準備
$zip->open($zipDir.$zipName, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE);

//zipにファイルを詰め込んでいきます
$zip->addFile('/var/www/html/resource/image.png', 'image.png');
$zip->addFile('/var/www/html/resource/image2.png', 'image2.png');
$zip->addFile('/var/www/html/resource/image3.png', 'image4.png');
$zip->addFile('/var/www/html/resource/data.json', 'data.json');

// 書き込み終了
$zip->close();

// 出力
header('Content-Type: application/zip; name="'.$zipName.'"');
header('Content-Disposition: attachment; filename="'.$zipName.'"');
header('Content-Length: '.filesize($zipDir.$zipName));
echo file_get_contents($zipDir.$zipName);

// zipを削除する
unlink($zipDir.$zipName);

こんな感じ。

詰め込みたいものを「addFile」でポンポンと。イメージしやすく簡単です。


そしたらあとは、
HTMLかJSでリンクを貼るだけ。

<!-- HTMLの場合 -->
<a href="/zip_download.php">データをダウンロードする!</a>
// JavaScriptの場合
location.href = '/zip_download.php';

これでおっけー!

参考にしてください。ではでは。


⇒ PHP: ZipArchive - Manual



この記事をシェア
この記事にコメントする
書き込む
あっきぃ(@appstars_aki)
Web、iOSなフリーランサーです。好きなものはお寿司です。でもお寿司は高いので普段は雑草とか拾ったドングリを食べています。お仕事や意味もなく毎月お小遣いをくれる人を探してます。

お仕事の依頼や自分で作ったアプリのレビューを希望しちゃう方はaki@appstars.jpまでご連絡ください。