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);
今回はファイルのみを圧縮しましたが、フォルダーをディレクトリ構造を維持したまま圧縮する方法についてはこちらの記事にまとめてあります。
Similar Posts:
- [PHP]ディレクトリー(フォルダ)の階層構造を維持したまま圧縮する
- [PHP]よくあるエラーメッセージの原因と対処法 1
- [PHP]file_get_contents()でWebページのステータスコードを取得する
- [PHP]Fatal Error発生時にログを作成する
- [PHP]FTPでアップロードやダウンロード等のファイル操作を行う
- [PHP]ソケット接続(fsockopen)でメール受信(POP3)
- [PHP]同じ名前のファイルが存在するときは番号(連番)を付ける
- [PHP]ユーザー定義関数の出力結果を任意の変数に格納する