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

  • このエントリーをはてなブックマークに追加
  • Pocket

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

WordPress対応 PHPファイル 難読化ツール

ご訪問ありがとうございます。
参考になりましたら『いいね!』もお願いします。

ITの活用情報を毎週お届けする無料メルマガに是非ご登録ください。

閉じる

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

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

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