2017-12-01 3 views
0

zip 파일을 생성하고 다운로드했습니다. 하지만 내 문제는 단지 루트 폴더의 전체 파일이 아닌 특정 파일을 다운로드하려고한다는 것입니다.php에서 우편 아카이브 생성 및 다운로드

내 코드는 그냥 파일 만 임명했다 zip 파일이 아닌 폴더를 만들고 싶어 특정 파일이 아닌 루트 폴더의 모든 파일이

$zipname = 'documents.zip'; 
$zip = new ZipArchive; 
$zip->open($zipname, ZipArchive::CREATE); 
foreach ($allDocuments as $document) { 
    $filetopath = public_path().$document; 
    $filename = explode('/',$document); 
    $name = end($filename); 
    $zip->addFile($filetopath,$name); 
} 
$zip->close(); 

header('Content-Type: application/zip'); 
header('Content-disposition: attachment; filename='.$zipname); 
header('Content-Length: ' . filesize($zipname)); 
readfile($zipname); 

입니다. 그러나 이것으로 모든 폴더와 모든 파일을 가져옵니다.

$ alldocumnets 변수에서 나는 모든 레코드가 아닌 제한된 레코드를 얻고 있습니다. 그러나 zip을 만들 때 모든 파일을 가져옵니다.

어디서 잘못되고 있는지 이해할 수 없습니다. 디렉토리에 대한

답변

1

문제는 분명하다 : 단지 불행하게도, 두 번째 부분은 명확하지 않다

<?php 
$allDocuments = array("a.py","b.py"); 

$zipname = 'documents.zip'; 
$zip = new ZipArchive; 
$zip->open($zipname, ZipArchive::CREATE); 
foreach($allDocuments as $document) { 
    $filetopath = getcwd().'\\'.$document; 
    if(!is_dir($filetopath)) { 
    $filename = explode('/',$document); 
    $name = end($filename); 
    $zip->addFile($filetopath,$name); 
    } 
} 
$zip->close(); 

header('Content-Type: application/zip'); 
header('Content-disposition: attachment; filename='.$zipname); 
header('Content-Length: ' . filesize($zipname)); 
readfile($zipname); 

사실 is_dir 모든() ==를 제외합니다. 귀하가 어떤 파일을 제외시킬 것인지 또는 정확한 문제가 무엇인지 알려주지 않는 한, 이것은 극복 할 수없는 것입니다.

+0

zipname을 동적으로 설정하여이 문제를 해결했습니다. 사실 나는 날짜 범위가 있으며 해당 범위에 따라 데이터베이스에서 문서를 가져 와서 zip 파일을 만들고 다운로드합니다. 로그 범위를 설정하면 zip에 많은 파일이 있습니다. 그러나 그 후에 작은 날짜 범위를 설정하면 파일이 줄어들지 만 여전히 이전 파일이 모두 나옵니다. 동일한 우편 번호 때문입니다. –

+0

zipname을 동적으로 설정하면 문제가 없습니다. 그러나이 문제에 대한 최선의 해결책이 필요하지는 않습니다. 도 사용했습니다. $ zip-> open ($ zipname, ZipArchive :: OVERWRITE); –

+0

나는 당신이 무슨 뜻인지 정말로 모르겠다. 이 대답은 도움이되지 않아 친절하게 제거합니다. 그렇지 않으면, upvote하고 동의하십시오. – wp78de

관련 문제