2017-12-01 29 views
0

私はzipファイルを作成してダウンロードしました。しかし、私の問題は、私はちょうどルートフォルダの完全なファイルではなく、特定のファイルをダウンロードしたいということです。phpでzipアーカイブを作成してダウンロードします

私のコードは、私はちょうど名前のファイルのみを持っている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

ディレクトリに関する質問は明確である:ちょうど(is_dirすべてを除外する)==真

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

は残念ながら、第二部は明らかではありません。どのファイルを除外しようとしているのか、それとも何が問題なのかを教えてくれない限り、これは救済できません。

+0

私はzipnameを動的に設定することでこれを解決しました。 実際に私は日付範囲を持っており、その範囲に応じてデータベースから文書を取得し、zipファイルを作成してダウンロードします。 ログ範囲を設定すると、zipに多くのファイルがあります。しかしその後、私は小さな日付範囲を設定すると、私は少ないファイルを取得する必要がありますが、それでも私はすべての以前のファイルを取得していた。これは同じzipnameのためです。 –

+0

私はzipnameを動的に設定するとうまくいきます。 しかし、これは私がこの問題の最善の解決策を必要とする最良の解決策ではありません。 私も $ zip-> open($ zipname、ZipArchive :: OVERWRITE)を使用しました。 –

+0

あなたは何を意味するのか本当に分かりません。私はこの答えは役に立たないと私は親切にそれを削除します。さもなければ、upvoteと受け入れてください。 – wp78de

関連する問題