zip圧縮を行う方法。
準備するまでが少々面倒ですが、その後は比較的楽かも(・∀・)
このサイトの「PHP 5.2.10 zip package」というのをダウンロード。
ダウンロードファイルの中に「ext」というフォルダがあり、その中に「php_zip.dll」が入っています。
これを、PHPインストールフォルダの下の「ext」に移動します。
その後「php.ini」に以下の記述を加えます。
これで準備OK!!
zip圧縮を行うメソッドの例が以下。
- set_time_limit関数を使って、処理時間を延長しています。
- unlink関数を使って、ファイル削除を行っています。
private function makeZipFile($outputFileName){
set_time_limit(3000);
// ログ記録インスタンスの生成
$logging = new Logging();
$logging->loggingStartZip($outputFileName);
// 出力先ファイルのディレクトリに移動
chdir($this->masterRootDir.self::OUTPUT_FILE_DIR);
$zip = new ZipArchive;
$zipFileName = str_replace(".txt", "", $outputFileName);
$zipFileName = $zipFileName.".zip";
$zipFilePath = $this->masterRootDir.self::OUTPUT_FILE_DIR.$zipFileName;
$res = $zip->open($zipFile, ZipArchive::CREATE);
if ($res === TRUE) {
$zip->addFile(basename($outputFileName));
$zip->close();
// 元のファイルを削除
unlink($outputFileName);
$logging->loggingEndZip($outputFileName);
}
// ルートディレクトリに戻る
chdir($this->masterRootDir);
return $zipFilePath;
}
このメソッドをループで数回呼び出して、複数のテキストファイルを圧縮する
という使い方をしていました。
当初、
- テキストファイルの置いてあるディレクトリに移動。
- zipファイルを作成し、そこに1のテキストファイルを追加(=zip圧縮)。
…というフローをループで処理させようとしていたのですが、一番目の
テキストファイルのみが圧縮され、二つ目以降のテキストファイルについては
全く圧縮されませんでした(´・ω・`)
どうやら、上記「1」でカレントディレクトリを変更してしまったままに
していたことが原因だったようで、上記のフローに
「元のディレクトリ(この場合はルートディレクトリ)に戻る」
処理を追加したところ、二つ目以降のテキストファイルも圧縮されるように
なりました(・∀・)