Scarica più file come file zip utilizzando php


112

Come posso scaricare più file come file zip usando php?


Puoi usare la lib della classe xip.lib.php. zip.lib.php Per esempi, fare riferimento a questo articolo
Abdel Raoof

Risposte:


212

È possibile utilizzare la ZipArchiveclasse per creare un file ZIP e trasmetterlo al client. Qualcosa di simile a:

$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();

e per riprodurlo in streaming:

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

La seconda riga forza il browser a presentare una casella di download all'utente e richiede il nome filename.zip. La terza riga è facoltativa ma alcuni browser (principalmente meno recenti) presentano problemi in alcuni casi senza che venga specificata la dimensione del contenuto.


4
Non dovrebbe essere $zip = new ZipArchive;invece di $zip = new ZipFile;?
Matthieu

@ Matthieu Le parentesi non sono necessarie. Guardate negli esempi: php.net/manual/en/ziparchive.open.php
Lars Gyrup Brink Nielsen

1
Cosa dovrebbe significare la variabile $ zipfilename?
Pascal Klein

$ zipfilename dovrebbe leggere $ zipname - è il nome del file zip creato come stringa.
Chris

1
Non funziona nell'apri zip predefinito di Windows, ma funziona in Win zipper o 7-zip. Sto cercando di aggiungere un'immagine nella cartella zip e quindi di scaricarla come zip
RN Kushwaha

36

Questo è un esempio funzionante di creazione di ZIP in PHP:

$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();

2
Questa risposta funziona! La differenza è addFromString, addFile è mal codificato.
André Catita


1

Sei pronto per usare php zip lib e puoi usare anche 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/

e c'è anche php pear lib per questo http://www.php.net/manual/en/class.ziparchive.php

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.