小金井にあるWEB制作会社の備忘録

MEMORANDUM

PHPでzipファイルをアップロード後、サーバー内に解凍(展開)

画像データ等をサーバーにアップロードする際、一点づつアップロードしても良いけれど、ファイル数が多くなると時間がかかる上に面倒なので、zipファイルを使ってアップロードした際の方法をメモ。

HTML

<form action="upload.php" method="post" enctype="multipart/form-data">
<dl>
<dt>画像ファイル[zip形式]</dt>
<dd><input type="file" name="newzip"></dd>
</dl>
<input type="submit" name="submit" value="登録">
</form>

upload.php(PHP)

if(!empty($_POST['submit'])){

	define('error01', '画像ファイルのデータサイズが大きすぎます');
	define('error02', '画像ファイルのデータ形式が不適切です');

	//エラーチェック
	if(!empty($_FILES['newzip']['size'])){
		$ext = substr($_FILES['newzip']['name'], strrpos($_FILES['newzip']['name'], '.') + 1);
		if($_FILES['newzip']['size'] > 128000000){
			$err_msg['error']['newzip'] = error01;
		}else if($ext != 'zip'){
			$err_msg['error']['newzip'] = error02;
		}
	}
	
	if(empty($err_msg['error'])){
		
		//ディレクトリの指定
		$directory_path = $_SERVER['DOCUMENT_ROOT'].'/upload/';
		
		if($_FILES['newzip']['size'] > 0 ){
			$filename = time().'.zip';
			$filepath = $directory_path.'/'.$filename;
			move_uploaded_file($_FILES['newzip']['tmp_name'], $filepath);

			if (file_exists($filepath)) {
				
				$zip = new ZipArchive;
				if ($zip->open($filepath) === TRUE) {
					$zip->extractTo($directory_path);
					$zip->close();
					
					//zipファイルの削除
					unlink($filepath);
				}
			}
		}
	}
}