【当ブログではアフィリエイト広告を利用しています】

[PHP] ディレクトリをZIPで圧縮する

attention この記事は2年以上前の投稿になります。
記載された情報が古くなっている可能性がございますので十分ご注意ください。

PHPで指定したディレクトリ(サブディレクトリも全て)をZIPで圧縮するプログラム。

考慮するポイントは以下の2点

  1. 書庫内のルートディレクトリを指定できる
  2. ディレクトリごと(サブディレクトリも全て)圧縮できる
  3. ZIPファイルをファイルとして保存しないで、バイナリストリームとして扱える

上記を満たすライブラリとして、「Class: Create ZIP File」を選択した。
※ダウンロードにはユーザ登録が必要

「CreateZipFile.inc.php」のメソッドの動きが変なので、少々書き換えました

	public function zipDirectory($dirName, $outputDir) {
		if (!is_dir($dirName)){
			trigger_error("CreateZipFile FATAL ERROR: Could not locate the specified directory $dirName", E_USER_ERROR);
		}
		$tmp=$this->parseDirectory($dirName);
		$count=count($tmp);
		$this->addDirectory($outputDir); ←削除
		for ($i=0;$i<$count;$i++){
			$fileToZip=trim($tmp[$i]);
			$newOutputDir=substr($fileToZip,0,(strrpos($fileToZip,'/')+1)); ←削除
			$newOutputDir = $outputDir.str_replace($dirName, '', $fileToZip); ←追加
			$outputDir=$outputDir.$newOutputDir; ←削除
			$fileContents=file_get_contents($fileToZip);
			$this->addFile($fileContents,$newOutputDir);
		}
	}

 
 
ZIP圧縮してダウンロードさせるためのコード

require_once("CreateZipFile.inc.php");
$createZip = new CreateZipFile;  

$createZip->zipDirectory(圧縮するディレクトリ, 書庫内のルートディレクトリ);

header( "Content-Type: application/octet-stream" );
header( "Content-disposition: attachment; filename=".ダウンロードするZIPファイル名 );
$zip_buffer = $createZip->getZippedfile();
print $zip_buffer;

※addFileメソッドで単一のファイルも追加できるよ

ご意見・ご感想をお待ちしております。

いただいた情報は一般公開されません。(入力いただいたメールアドレスにてご返信させていただきます)
また、* が付いている欄は必須項目となりますので、必ずご記入をお願いします。

内容に問題なければ、下記の「コメントを送信する」ボタンを押してください。