PHPはいいですね。zipの圧縮と展開まで自動的にやってくれる。私のサーバー環境では何も設定しなくてもできてしまいましたが、PHP 5 >= 5.2.0, PECL zip >= 1.1.0ということでPHP5の拡張モジュール「PECL」のインストールがしていない場合は使えないと思います。PHPのかなり詳しいサイトhttp://www.php.net/にもインストール方法が載っているので参考にしてください。
アーカイブの中身の単一のファイルのみも展開できるので、PHP: ZipArchive::extractToを参考にしてください。
またsystem()は自動的にshellのメッセージを出力してしまうようなので、shell_exec()を使うと出力文字列を制御できますのでエラールーチンなんかを作ることができると思います。
Zipファイルを展開する
xxx.zipというアーカイブをxxxという通常のフォルダーに展開します。<?まずはZipArchiveクラスを初期化して呼び出します。(*1) openメソッド、extractToメソッド、closeメソッドを使ってzipフォルダーを展開するという感じです。実際にzipを展開するのはextractToメソッド(*2)です。オブジェクトに慣れてないと何だかあんまり馴染まないですが、慣れてくると便利です。
$archive_path = "xxx.zip"; # 展開するアーカイブのパス
$opend_file = "xxx";# 展開されるアーカイブのパス
$zip = new ZipArchive; #(*1)
if ($zip->open("$archive_path") === TRUE) {
$zip->extractTo("$opend_file"); #(*2)
$zip->close();
echo '成功';
} else {
echo '失敗';
}
?>
アーカイブの中身の単一のファイルのみも展開できるので、PHP: ZipArchive::extractToを参考にしてください。
zipで圧縮する
いろいろ迷いましたがPHPとは関係なくshellのコマンドを使った方が早いことがわかりました。この例ではクラスもメソッドも必要ないです。shellのzipコマンドで圧縮するフォルダ(ディレクトリ)と圧縮後のファイル名を指定すればよいだけです。PHP内でshellを使う場合は、system関数を利用します。<?注意点はshellのzipコマンドのパスが感覚的に「zip <zip圧縮するフォルダ> <圧縮後のフォルダ>」と思いますが、そこのところが逆でして、「zip <圧縮後のフォルダ> <zip圧縮するフォルダ>」となっていることです。しばらく気がつきませんでしたよ。
$file = "test";# 圧縮するファイルパス(フォルダーパス)
$archive_zip_dir = "test.zip"; # 圧縮後のファイルパス(ファイル名)
$re = system("zip -r $archive_zip_dir $file");
print $re."<br />\n";
?>
またsystem()は自動的にshellのメッセージを出力してしまうようなので、shell_exec()を使うと出力文字列を制御できますのでエラールーチンなんかを作ることができると思います。



