2016-12-05 8 views
0

イメージをzipファイルに追加しようとしていて、それをダウンロードするためにヘッダーが必要です。以下は、私が今使っているコードスニペットです。php zipのダウンロードコードに問題がある

$zip = new ZipArchive(); 
$zip_name = 'design_images_'.time() .".zip"; 
if($zip->open($zip_name, ZIPARCHIVE::CREATE)!==TRUE){ 
    $error .= "* Sorry ZIP creation failed at this time"; 
} 
    $i = 0; 
foreach($valid_files as $file){ 
    $image_name = 'design_image_' . $i; 
    $zip->addFile($file, $image_name); 
    $i++; 
} 
$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.'"'); 
    readfile($zip_name); 

} 

私がzipファイルを開こうとすると、エラーが発生します。アーカイブが壊れています。

+0

は 'zip-> open'でエラーがありませんあなたは確かにいますか? 'readfile'の後に出力がありますか? –

+0

はい、ジップは正確なサイズで正常にダウンロードされますが、抽出することはできません。 zipファイルをダブルクリックすると、適切なサイズの画像がすべて表示されます。しかし、同じものを開くか抽出することはできません。 –

答えて

0

ダウンロードを提供する前に、出力バッファをきれいにしてください:

if(file_exists($zip_name)){ 

    // Clean the output buffer. 
    while (ob_get_level()) { 
    ob_end_clean(); 
    } 

    // 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.'"'); 
    readfile($zip_name); 

} 
関連する問題