2017-12-12 17 views
0

ziparchiveを使用していくつかのファイルのzipを作成していますが、次のコードを使用してファイルをダウンロードする必要があります。zipアーカイブを使用してPHPで有効なzipファイルを作成できませんか?

if(count($valid_files > 0)){ 
    $zip = new ZipArchive(); 
    $zip_name = "pixels.zip"; 
    if($zip->open($zip_name, ZIPARCHIVE::CREATE)!==TRUE){ 
     $error .= "* Sorry ZIP creation failed at this time"; 
    } 

    foreach($valid_files as $file){ 
     $zip->addFile($file); 
    } 

    $zip->close(); 
    if(file_exists($zip_name)){ 
     // force to download the zip 
     header("Pragma: public"); 
     header("Expires: 0"); 
     header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
     header("Cache-Control: private",false); 
     header('Content-type: application/zip'); 
     header('Content-Disposition: attachment; filename="'.$zip_name.'"'); 
     ob_clean(); 
     flush(); 
     readfile($zip_name); 
    //remove zip file from temp path 
     unlink($zip_name); 
    } 

} else { 
    echo "No valid files to zip"; 
    exit; 
} 

$valid_filesには、各要素が完全なファイルパスとして格納されているとします。上記のコードは、ファイルを含むzipファイルを作成すると予想されますが、逆にダウンロードが開始されると、仕上げサイズや最大サイズなしでダウンロードが続けられます。そして、ファイルがダウンロードされたとしても、ファイルを解凍しようとすると、無効なファイルとしてエラーが発生することがあります。問題を理解できない場合は、どんな助力も大変ありがとうございます。

+0

'$ error'には何も含まれていませんか? – Jaime

+0

少なくともファイルがダウンロードされることがありますか? 'unlink'を削除して2つのファイルを比較するとどうなりますか?彼らは同じですか?サーバー側のファイルを解凍できますか?あなたのスニペットは私にとってはうまくいくと思われる。 – delf

+0

ヘッダー( "Content-length:$ size")のようなヘッダーを追加すると、ブラウザに期待どおりの進行状況バーが表示されます。 –

答えて

0

これは主に、巨大なzipファイルがすでに同じフォルダに存在し、新しいジップを作成するために使用したzipという名前で、新しいジップが作成されなかったためです。コメントをMarceloが示唆したように、サイズは言及されていませんでした。ダウンロードは成功しませんでしたが、宣言されたバイナリ形式のコードで、サイズが変更され、zip名が変更されたり、

関連する問題