PHP5.2 以上で、zip Extension が利用可能な環境であればZIPファイル圧縮や展開は次の方法で簡単にできます。
圧縮
<?php // 圧縮するファイルの配列 $files = array('file1.txt', 'file2.txt'); $zip = new ZipArchive(); $res = $zip->open('./test2.zip', ZipArchive::CREATE); if($res === true){ foreach($files as $file){ $zip->addFile($file); } $zip->close(); } else { echo 'Error Code: ' . $res; }
展開
<?php // 圧縮ファイルのパス $file = './test.zip'; // 展開先ディレクトリ $to = './test/'; $zip = new ZipArchive(); $res = $zip->open($file); if($res === true){ $zip->extractTo($to); $zip->close(); } else { echo 'Error Code: ' . $res; }
ZipArchive オブジェクトにファイルを追加するには addFile() を使います。
ファイルではなく文字列からファイルを作成して追加する場合は addFromString(ファイル名, 内容) で行います。
$zip->addFromString("sample.txt", "Hello, World!");
作成した ZIP ファイルをダウンロードさせる場合は次のようにします。
<?php $file = './test.zip'; header('Content-Type: application/octet-stream'); header(sprintf('Content-Disposition: attachment; filename="%s"', basename($file)) ); header(sprintf('Content-Length: %d', filesize($file)) ); readfile($file);
今回はファイルのみを圧縮しましたが、フォルダーをディレクトリ構造を維持したまま圧縮する方法についてはこちらの記事にまとめてあります。