首页 文章

使用php下载多个文件作为zip文件

提问于
浏览
94

如何使用php下载多个文件作为zip文件?

4 回答

  • 181

    创建一个zip文件,然后通过设置 Headers 下载文件,读取zip内容并输出文件 .

    http://www.php.net/manual/en/function.ziparchive-addfile.php

    http://php.net/manual/en/function.header.php

  • 1

    这是用PHP制作ZIP的一个工作示例:

    $zip = new ZipArchive();
    $zip_name = time().".zip"; // Zip name
    $zip->open($zip_name,  ZipArchive::CREATE);
    foreach ($files as $file) {
      echo $path = "uploadpdf/".$file;
      if(file_exists($path)){
      $zip->addFromString(basename($path),  file_get_contents($path));  
      }
      else{
       echo"file does not exist";
      }
    }
    $zip->close();
    
  • 27

    您可以使用ZipArchive类创建ZIP文件并将其流式传输到客户端 . 就像是:

    $files = array('readme.txt', 'test.html', 'image.gif');
    $zipname = 'file.zip';
    $zip = new ZipArchive;
    $zip->open($zipname, ZipArchive::CREATE);
    foreach ($files as $file) {
      $zip->addFile($file);
    }
    $zip->close();
    

    并流式传输:

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

    第二行强制浏览器向用户显示下载框并提示名称filename.zip . 第三行是可选的,但某些(主要是较旧的)浏览器在某些情况下会出现问题而不指定内容大小 .

  • 1

    你已准备好使用php zip lib,也可以使用zend zip lib,

    <?PHP
    // create object
    $zip = new ZipArchive();   
    
    // open archive 
    if ($zip->open('app-0.09.zip') !== TRUE) {
        die ("Could not open archive");
    }
    
    // get number of files in archive
    $numFiles = $zip->numFiles;
    
    // iterate over file list
    // print details of each file
    for ($x=0; $x<$numFiles; $x++) {
        $file = $zip->statIndex($x);
        printf("%s (%d bytes)", $file['name'], $file['size']);
        print "
    ";    
    }
    
    // close archive
    $zip->close();
    ?>
    

    http://devzone.zend.com/985/dynamically-creating-compressed-zip-archives-with-php/

    这个http://www.php.net/manual/en/class.ziparchive.php也有php pear lib

相关问题