답변 3개 / 댓글 13개
채택된 답변
+20 포인트
allow_url_fopen 이걸 오픈시 외부에서 include를 할수 있도록 허용하는 부분이라 제한하는 부분이고요
php로 파일을 압축해서 받도록 처리하시려는 작업을 위해서는 zip 압축이 용이한 부분입니다.
답변에 대한 댓글 5개
$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이에요
$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호출해서 파일 삭제하는것을 하려고 합니다.
header("Content-Disposition: attachment; filename=".$zip_name);
header("Pragma: no-cache");
header("Expires: 0");
헤더구분에서 문제가 있었던것같습니다.
아직도 이유를 찾지 못했지만 아마도 zip 파일을 ZipArchive로 생성된것과 무관하게
임시로 zip 파일을 다운받아버려서 문제가 생긴것같긴한데...
일단
ZipArchive을 이용한 zip 파일이 정상적으로 생성되는것을 확인했고
생성 후 자바스크립트로 다운받는것까지 정상적으로 되는것을 확인해서
이후 일단 임시 zip 파일 생성한걸 ajax로 php호출해서 파일 삭제하는것을 하려고 합니다.
답변에 대한 댓글 1개
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호출해서 파일 삭제하는것을 하려고 합니다.
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 관련함수로 로컬로 가져온다음
압축하는 방법도 있을것 같습니다.
답변에 대한 댓글 7개
에러가 따로 발생하는건 아니고 .zip 파일 다운로드까지 되는데
열려고하면 폴더를 열수없습니다 'xxxxx.zip'가 올바르지 않습니다 라고 뜨고
압축풀려고하면 [zip]압축파일로 파일을 열 수 없습니다 압축되지 않았습니다.
라고 떠요.
일반파일을 강제로 확장자만 .zip 으로 바꾼 느낌이랄까...
경로는 확인해봤는데 이상없더라구요...뭐가문제일까요...
allow_url_fopen 는
혹시나 ZipArchive 가 플러그인 형태로 서버세팅시
확장기능 세팅같은걸 해야할까 싶어서 호스팅업체에 문의했더니
allow_url_fopen 를 on 할수없다고만 답변을 받아서
당연히 관련있는건줄알고 여기 질문올릴때 그렇게 쓴거에요.
열려고하면 폴더를 열수없습니다 'xxxxx.zip'가 올바르지 않습니다 라고 뜨고
압축풀려고하면 [zip]압축파일로 파일을 열 수 없습니다 압축되지 않았습니다.
라고 떠요.
일반파일을 강제로 확장자만 .zip 으로 바꾼 느낌이랄까...
경로는 확인해봤는데 이상없더라구요...뭐가문제일까요...
allow_url_fopen 는
혹시나 ZipArchive 가 플러그인 형태로 서버세팅시
확장기능 세팅같은걸 해야할까 싶어서 호스팅업체에 문의했더니
allow_url_fopen 를 on 할수없다고만 답변을 받아서
당연히 관련있는건줄알고 여기 질문올릴때 그렇게 쓴거에요.
$files[$cnt]["imgurl"]; 는 $files["imgurl"]; 로 수정해서 정상적으로 출력되는거 확인했어요.
$files["filename"]; 도 마찬가지구요.
몇가지 걸리는게...
혹시 경로가 물리적 경로여야되나요?
http://www.abcd.com/ 도메인주소를 포함한 경로가 아닌 /home/호스팅아이디/html/ 형태의 경로여야되는건지....
그리고 경로에 한글이 포함되어있긴한데....
루트에 ziptest 만들고 파일 두개만 넣어놓고 해도 똑같네요...왜그런지 도저히 모르겠네요 ㅋㅋㅋ
php버전은 상관없는건지...
하긴 구문에 오류가있었다면 페이지 자체에서 에러를 띄웠겠져?...;;
$files["filename"]; 도 마찬가지구요.
몇가지 걸리는게...
혹시 경로가 물리적 경로여야되나요?
http://www.abcd.com/ 도메인주소를 포함한 경로가 아닌 /home/호스팅아이디/html/ 형태의 경로여야되는건지....
그리고 경로에 한글이 포함되어있긴한데....
루트에 ziptest 만들고 파일 두개만 넣어놓고 해도 똑같네요...왜그런지 도저히 모르겠네요 ㅋㅋㅋ
php버전은 상관없는건지...
하긴 구문에 오류가있었다면 페이지 자체에서 에러를 띄웠겠져?...;;
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호출해서 파일 삭제하는것을 하려고 합니다.
header("Content-Disposition: attachment; filename=".$zip_name);
header("Pragma: no-cache");
header("Expires: 0");
헤더구분에서 문제가 있었던것같습니다.
아직도 이유를 찾지 못했지만 아마도 zip 파일을 ZipArchive로 생성된것과 무관하게
임시로 zip 파일을 다운받아버려서 문제가 생긴것같긴한데...
일단
ZipArchive을 이용한 zip 파일이 정상적으로 생성되는것을 확인했고
생성 후 자바스크립트로 다운받는것까지 정상적으로 되는것을 확인해서
이후 일단 임시 zip 파일 생성한걸 ajax로 php호출해서 파일 삭제하는것을 하려고 합니다.
답변을 작성하려면 로그인이 필요합니다.
allow_url_fopen 설정은 off로 하든 상관없는건가요?