2009-11-18 19 views

risposta

163

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

$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 di streaming:

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

La seconda linea costringe il browser per presentare una scatola di download per l'utente e richiede il nome filename.zip. La terza riga è facoltativa, ma alcuni browser (soprattutto più vecchi) presentano problemi in alcuni casi senza specificare la dimensione del contenuto.

+1

informazioni fantastiche. Grazie! – a432511

+4

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

+0

@Matthieu Le parentesi non sono necessarie. Guarda negli esempi: http://www.php.net/manual/en/ziparchive.open.php –

3

È possibile utilizzare il lib xip.lib.php Class. zip.lib.php Per esempio, fare riferimento a questa article

+0

Il collegamento dell'articolo è già morto –

24

Questo è un esempio di lavoro di fare 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(); 
+0

Salve, signore, per favore, qual è la differenza tra questa e la risposta di clets? –

+2

Questa risposta funziona! La differenza è addFromString, addFile è mal codificato. –

1

si è pronti a fare con php zip lib, e possono utilizzare Zend lib zip troppo,

<?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 questa http://www.php.net/manual/en/class.ziparchive.php