DB상의 많은 파일을 한꺼번에 다운받기
<? /*************************************************************** 프로그램명 : filedownload_zip.php 설명 : 파일 여러개 zip 파일로 묶어서 받기 작성일자 : 2005-10-06 오후 1:58 작성자 : 윤영식 ***************************************************************/ // 에러 메시지 뿌리고 history.back() function error($msg) { echo "<script language="javascript">rn"; echo " alert("".$msg."");rn"; echo " history.back();rn"; echo "</script>"; exit(); } // 디렉토리 통째로 삭제하기.... function rm($fileglob) { if (is_string($fileglob)) { if (is_file($fileglob)) { return unlink($fileglob); } else if (is_dir($fileglob)) { $ok = rm("$fileglob/*"); if (! $ok) { return false; } return rmdir($fileglob); } else { $matching = glob($fileglob); if ($matching === false) { trigger_error(sprintf('No files match supplied glob %s', $fileglob), E_USER_WARNING); return false; } $rcs = array_map('rm', $matching); if (in_array(false, $rcs)) { return false; } } } else if (is_array($fileglob)) { $rcs = array_map('rm', $fileglob); if (in_array(false, $rcs)) { return false; } } else { trigger_error('Param #1 must be filename or glob pattern, or array of filenames or glob patterns', E_USER_ERROR); return false; } return true; } // 업로드 파일 디렉토리 $up_path = "../upload"; $zip_dir = "../upload/tmp_zip"; // tmp 디렉토리 만들기 위해서 file_dir 만들기 $tmp = microtime(); $tmp2 = explode(" ",$tmp); $file_dir = $tmp2[1].sprintf("%03d",(int)($tmp2[0]*1000)); $tmp=null; $tmp2=null; // tmp 디렉토리 $tmp_dir = $zip_dir."/".$file_dir; // tmp 디렉토리 생성 if(!mkdir ($tmp_dir, 0700)) { error("파일 생성시 에러가 발생했습니다."); exit; } $sql = "SELECT id, filename FROM table"; $result = mysql_query($sql); $i=0; while($row = mysql_fetch_assoc($result)) { $org_name = "/".$row[file_name]; $new_name = "/".$id."_".$row[file_name]; // tmp 디렉토리로 COPY @copy($up_path.$org_name,$tmp_dir.$new_name); $i++; } mysql_free_result($result); mysql_close(); if (!$i) { rm($tmp_dir); error("선택된 파일이 없습니다."); exit; } // zip 으로 묶기 // zip 경로는 서버에서 which zip 을 통해서 알아낸다. @exec("/usr/bin/zip ".$tmp_dir."/".$file_dir.".zip ".$tmp_dir."/*"); // 다운로드 받기 if( $fp = @fopen( $tmp_dir."/".$file_dir.".zip","r")) { Header("Content-type: file/unknown"); Header("Content-Disposition: attachment; filename=".$file_dir.".zip"); Header("Content-Description: PHP3 Generated Data"); while ($data=fread($fp, filesize( $tmp_dir."/".$file_dir.".zip"))){ print($data); } } else { error("서버에 자료파일이 없습니다."); } // 임시로 만들어진 모든 데이터 지우기, 단, 사용자가 취소를 누르면 서버상에 임시데이터가 지워지지 않으니 cron 을 통해 하루에 한번씩 지워주면 된다. rm($tmp_dir); exit; ?>