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

2010年8月11日 // Posted in TIPS, ソフトウェア (Tags: ) |  No Comments   by  mkoba

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メソッドで単一のファイルも追加できるよ




日本一相談しやすいITコンサルティング会社を目指し、中小企業に特化したITサービスの仕組み作りのプロ集団 システム開発とITコンサルティングの株式会社ドリームハイブ 日本一相談しやすいITコンサルティング会社を目指し、中小企業に特化したITサービスの仕組み作りのプロ集団
弊社代表(ドリームハイブ代表 山本 悟)がお送りしている無料のメルマガです。
興味がございましたら、是非ご登録ください!!

This entry was posted on 2010年8月11日 at 14:54 and is filed under TIPS, ソフトウェア (Tags: ). You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

Leave a Reply (name & email required)