메뉴 건너뛰기

프로그램언어

조회 수 28332 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

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; 
?> 


List of Articles
번호 제목 날짜 조회 수
20 CodeIgniter - DB오류체크, 디버깅 여부 설정 2021.03.29 494
19 Class를 이용한 DB Connection 소스 (Oracle, MyS 2014.02.27 30504
18 class_exists 클래스가 정의되었는지 확인 2016.12.23 19881
17 call_user_func 사용자가 정의한 함수를 호출하여 실행고자 할 때 사용 2016.12.23 21305
16 base64 인코딩/디코딩 함수의 특징 file 2018.02.09 13078
15 array_slice 배열의 일부를 추출 2016.12.23 20775
14 array_push 배열 끝에 하나 이상의 요소를 추가 2016.12.23 21604
13 array_key_exists 배열에서 key가 존재하는지 확인 2016.12.23 22206
12 array (배열) 2015.04.14 24904
11 AJAX를 활용하여 JSON 댓글 처리하기 (PHP) 2018.07.04 8456
10 AJAX로 해당 페이지에서 COOKIE 사용하기 2021.03.26 359
9 Ajax로 구연한 실시간 서버시간출력 file 2017.03.06 21031
8 ajax refresh 시키기(자동리플래쉬) with php file 2017.03.06 23185
7 addslashes 함수의 필요성 2015.04.14 24250
6 addslashes — 문자열을 슬래시로 인용 2016.12.23 23083
5 13자리 timestamp 생성하기 file 2020.09.28 652
4 $_SERVER변수 2014.02.27 24444
3 $_SERVER 환경변수 2016.09.21 33237
2 $_SERVER 함수 2016.12.23 23943
1 $_FILES 2016.12.23 23847
Board Pagination Prev 1 ... 8 9 10 11 12 13 14 15 16 17 Next
/ 17

하단 정보를 입력할 수 있습니다

© k2s0o1d4e0s2i1g5n. All Rights Reserved