创建一个zip但无法提取

时间:2015-04-22 09:15:16

标签: php zip

我设法压缩文件并下载。唯一的问题是我无法解压缩zip文件说“加载存档时出错”。它包含数据,因为它有大约1000kb。我的代码有问题吗?

$zip = new ZipArchive();

$zip_name = "zipfile.zip";

if($zip->open($zip_name, ZipArchive::CREATE) !== TRUE) {
    echo("Zip failed");
} else {
  foreach($temp_file as $file) {
      $zip->addFile($file, $file);
  }   

 $zip->close();

 header('Content-disposition: attachment; filename=media.zip');
 header('Content-type: application/zip');
 readfile($zip_name);
} 

1 个答案:

答案 0 :(得分:0)

  • 我已添加变量$zipname以包含您的" zipfile.zip"的完整路径。它稍后用于确定filesize,它与content-length头一起发送。请调整路径!
  • 添加了更多标题,特别是长度和编译指示
  • 调整长度和处置以根据顶部的变量使用动态文件名
  • 在readfile()之后添加了exit() - 很少见,但你永远不知道注册的关闭处理程序及其输出行为
  • 请记住,如果您有通过readfile()发送的大文件,并且您有一个繁忙的站点,这将消耗内存

试一试:

 <? 

    $zip = new ZipArchive();

    $zip_name = "/path/to/zipfile.zip"; // <-- adjust path
    $file_name = basename($zip_name);

    if($zip->open($zip_name, ZipArchive::CREATE) !== TRUE) {
        echo("Zip failed");
    } else {

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

        $zip->close();

        header("Pragma: public");
        header("Content-Type: application/zip");
        header("Content-Disposition: attachment; filename=$file_name");
        header("Content-Length: " . filesize($zip_name));
        header("Content-Transfer-Encoding: binary");

        readfile($zip_name);

        exit;
    }