allow_url_fopen 설정 on 안하고 Zip 파일로 다운로드 못하나요?

allow_url_fopen 설정 on 안하고 Zip 파일로 다운로드 못하나요?

QA

allow_url_fopen 설정 on 안하고 Zip 파일로 다운로드 못하나요?

본문

쉐어링되는 호스팅 구조를 갖고있어서

호스팅사에서 allow_url_fopen 설정을 개방할수가 없다고 한 상태인데

그럼, ZipArchive 말고는 웹상에서 여러이미지를

Zip 으로 묶어서 다운로드 받는방법은 없을까요?

 

이 질문에 댓글 쓰기 :

답변 3

allow_url_fopen 이걸 오픈시 외부에서 include를 할수 있도록 허용하는 부분이라 제한하는 부분이고요
php로 파일을 압축해서 받도록 처리하시려는 작업을 위해서는 zip 압축이 용이한 부분입니다.

$sql1 = " select * from {$_table_name} where abcd = 'abcd' ";
$rst1 = $conn->query($sql1);

//압축할 파일들의 경로
$_file_list = array();
if ($rst1->num_rows > 0) {
    while($row = $rst1->fetch_assoc()) {
        array_push($_file_list, array(
            'filename' => $row['filename'],
            'imgurl' => $row['imgurl']
        ));
    }
}else{
    echo "<script>alert('업로드된 파일이 없습니다');</script>";
}

//다운로드되는 파일명
$zip_name = "abcd.zip";

$zip = new ZipArchive();
if ($zip->open($zip_name, ZipArchive::CREATE) !== true){
  exit("cannot open [".$zip_name."]");
}

$cnt = 0;
foreach($_file_list as $files){
    echo $files[$cnt]["imgurl"];
  $zip->addFile($files[$cnt]["imgurl"], $files[$cnt]["filename"]);
  $cnt++;
}


$zip->close();

header("Content-type: application/zip");
header("Content-Disposition: attachment; filename=".$zip_name);
header("Pragma: no-cache");
header("Expires: 0");

readfile($zip_name);
unlink($zip_name);

-----------------------------
코드는 이렇구요

zip 파일은 다운로드까지 되는데 열면 형식이 올바르지 않다고 나오고
안에 아무것도 없어요

$files[$cnt]["imgurl"]
는 파일명까지 포함된 경로입니다.

PHP 버전은 5.6이에요

header("Content-type: application/zip");
header("Content-Disposition: attachment; filename=".$zip_name);
header("Pragma: no-cache");
header("Expires: 0");

헤더구분에서 문제가 있었던것같습니다.
아직도 이유를 찾지 못했지만 아마도 zip 파일을 ZipArchive로 생성된것과 무관하게
임시로 zip 파일을 다운받아버려서 문제가 생긴것같긴한데...

일단
ZipArchive을 이용한 zip 파일이 정상적으로 생성되는것을 확인했고
생성 후 자바스크립트로 다운받는것까지 정상적으로 되는것을 확인해서
이후 일단 임시 zip 파일 생성한걸 ajax로 php호출해서 파일 삭제하는것을 하려고 합니다.

$files[$cnt]["imgurl"] 이게 로컬파일이 아니라 외부파일 uri 인가보네요.

curl 관련함수로 로컬로 가져온다음

압축하는 방법도 있을것 같습니다.

에러가 따로 발생하는건 아니고 .zip 파일 다운로드까지 되는데
열려고하면 폴더를 열수없습니다 'xxxxx.zip'가 올바르지 않습니다 라고 뜨고
압축풀려고하면 [zip]압축파일로 파일을 열 수 없습니다 압축되지 않았습니다.
라고 떠요.

일반파일을 강제로 확장자만 .zip 으로 바꾼 느낌이랄까...
경로는 확인해봤는데 이상없더라구요...뭐가문제일까요...

allow_url_fopen 는
혹시나  ZipArchive 가 플러그인 형태로 서버세팅시
확장기능 세팅같은걸 해야할까 싶어서 호스팅업체에 문의했더니
allow_url_fopen 를 on 할수없다고만 답변을 받아서
당연히 관련있는건줄알고 여기 질문올릴때 그렇게 쓴거에요.

그럼 이부분을 디버깅 해보셔야 할것 같네요.


echo $files[$cnt]["imgurl"]; // 출력 및 실제경로 파일존재유무 확인
echo $files[$cnt]["filename"]; // 이름 정상 출력 확인
$zip->addFile($files[$cnt]["imgurl"], $files[$cnt]["filename"]); // 내부 함수 동작 디버깅

$files[$cnt]["imgurl"]; 는 $files["imgurl"]; 로 수정해서 정상적으로 출력되는거 확인했어요.
$files["filename"]; 도 마찬가지구요.
몇가지 걸리는게...
혹시 경로가 물리적 경로여야되나요?
http://www.abcd.com/ 도메인주소를 포함한 경로가 아닌 /home/호스팅아이디/html/ 형태의 경로여야되는건지....

그리고 경로에 한글이 포함되어있긴한데....

루트에 ziptest 만들고 파일 두개만 넣어놓고 해도 똑같네요...왜그런지 도저히 모르겠네요 ㅋㅋㅋ

php버전은 상관없는건지...
하긴 구문에 오류가있었다면 페이지 자체에서 에러를 띄웠겠져?...;;

http:// ... 로 나가면 그게 곧 외부 파일인거고 거기서 파일을 못가져왔을 확률이 높습니다.
서버 안의 물리적 절대경로가 되어야 할것 같구요 (/home/abc/...)
그 경로에 파일이 올바로 있는지 확인이 되어야 하고
한글 포함 같은 경우엔 urlencode 적용시켜 보세요

header("Content-type: application/zip");
header("Content-Disposition: attachment; filename=".$zip_name);
header("Pragma: no-cache");
header("Expires: 0");

헤더구분에서 문제가 있었던것같습니다.
아직도 이유를 찾지 못했지만 아마도 zip 파일을 ZipArchive로 생성된것과 무관하게
임시로 zip 파일을 다운받아버려서 문제가 생긴것같긴한데...

일단
ZipArchive을 이용한 zip 파일이 정상적으로 생성되는것을 확인했고
생성 후 자바스크립트로 다운받는것까지 정상적으로 되는것을 확인해서
이후 일단 임시 zip 파일 생성한걸 ajax로 php호출해서 파일 삭제하는것을 하려고 합니다.

https://gurtn.tistory.com/64

위 링크 참고 해보세용

압축파일 오류는 첨부파일 경로가 안맞아서 오류나는거라고 하네용

 

header("Content-type: application/zip");
header("Content-Disposition: attachment; filename=".$zip_name);
header("Pragma: no-cache");
header("Expires: 0");

헤더구분에서 문제가 있었던것같습니다.
아직도 이유를 찾지 못했지만 아마도 zip 파일을 ZipArchive로 생성된것과 무관하게
임시로 zip 파일을 다운받아버려서 문제가 생긴것같긴한데...

일단
ZipArchive을 이용한 zip 파일이 정상적으로 생성되는것을 확인했고
생성 후 자바스크립트로 다운받는것까지 정상적으로 되는것을 확인해서
이후 일단 임시 zip 파일 생성한걸 ajax로 php호출해서 파일 삭제하는것을 하려고 합니다.

답변을 작성하시기 전에 로그인 해주세요.
전체 58
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT