CI 묻고 답하기

제목 zip 관련해서 문의드립니다.
카테고리 CIBOARD
글쓴이 손씨가문 작성시각 2019/04/04 14:05:42
댓글 : 2 추천 : 0 스크랩 : 0 조회수 : 15390   RSS

안녕하세요. 문의 드립니다.

$this->load->library('zip');

for($j = 0; $j < count($str_vouchers_file)-1; $j++)

{

$file = $_SERVER['DOCUMENT_ROOT'].$str_vouchers_file_route[$j]; //파일경로

$file_name = $individual->i_name.'_'.replace('/upfiles/voucher/','',$str_vouchers_file[$j]); //파일명

$this->zip->add_data(iconv('utf-8','euc-kr',$file_name), $file);

}

$characters = '123456789abcdefg';

$charactersLength = strlen($characters);

$randomString = '';

for ($i = 0; $i < 16; $i++) {

$randomString .= $characters[rand(0, $charactersLength - 1)];

}

$this->zip->archive($_SERVER['DOCUMENT_ROOT'].'/upfiles/zipfile/zipfile_'.$randomString.'.zip'); //zip파일 생성 

$this->zip->download(iconv('utf-8','euc-kr','알집.zip')); //다운로드

 

zip 파일안에 for문 갯수에 맞게 생성이 되는데

파일 오류가 납니다. 파일 경로안에는 정상적으로 파일이 들어있고, 경로도 맞는데 zip으로 변환해서 다운로드 하니까 오류 발생하네요.

단순 파일 다운로드시에는 정상적으로 됩니다.

19-1 파일명1.pdf   //파일명

/upfiles/voucher/xj5qazruuxvm3nh.pdf //파일 경로 파일

 

큰문제점을 못찾겠네요...

 

 

 다음글 트랜잭션관련 질문입니다. 3.0 (2)
 이전글 파일 업로드를 2개 이상할때 질문입니다. (7)

댓글

변종원(웅파) / 2019/04/04 14:29:03 / 추천 0

$_SERVER 변수 말고 php함수로 패스 구하세요.

zip 모듈이 설치되어 있는지도 확인해보시구요

엽토군 / 2019/04/05 11:46:54 / 추천 0

add_data() 메소드 관련 매뉴얼 잘 보면 아실 수 있겠지만 여기서 $file 변수에 넣어야 하는 것은 파일명이 아니에요. 그 파일 안의 내용인 바이너리데이터 이지요. 서버에 이미 존재하는 파일을 추가하는 거라면 read_file() 메소드를 써보세요.

그리고 iconv() 반드시 써야 하는 상황인가요? 그것보다는 특수문자 이스케이프를 해주셔야 할겁니다. /, \, " 등등요.

개인적으로 압축파일 만드는 작업은 그냥 ZipArchive 쓰시는걸 추천합니다. 시중에 각종 zip 라이브러리가 있지만 압축파일 만드는 정도의 작업은 그냥 순정 쓰는게 제일 알기 쉽고 안정적인것 같더군요. https://www.php.net/manual/en/ziparchive.open.php

$zip = new ZipArchive;
$res = $zip->open('test.zip', ZipArchive::CREATE);
if ($res === TRUE) {
    $zip->addFromString('test.txt', 'file content goes here');
    $zip->addFile('data.txt', 'entryname.txt');
    $zip->close();
    echo 'ok';
} else {
    echo 'failed';
}