2010-09-30 3 views

Répondre

14

Voici un exemple:

<?php 

// Adding files to a .zip file, no zip file exists it creates a new ZIP file 

// increase script timeout value 
ini_set('max_execution_time', 5000); 

// create object 
$zip = new ZipArchive(); 

// open archive 
if ($zip->open('my-archive.zip', ZIPARCHIVE::CREATE) !== TRUE) { 
    die ("Could not open archive"); 
} 

// initialize an iterator 
// pass it the directory to be processed 
$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator("themes/")); 

// iterate over the directory 
// add each file found to the archive 
foreach ($iterator as $key=>$value) { 
    $zip->addFile(realpath($key), $key) or die ("ERROR: Could not add file: $key"); 
} 

// close and save archive 
$zip->close(); 
echo "Archive created successfully."; 
?> 
+1

super code ... comment puis-je modifier cela pour ZIP un dossier imbriqué en excluant tous les dossiers qui y conduisent? le dossier de mon choix se trouve à "/var/www/vhosts/mysite.com/dev/wp-content/themes/mytheme/". Quand je lance ce script, je reçois un dossier de départ de var puis www, puis vhosts puis mysite.com etc. Qu'est-ce que je manque? –

+0

Dois-je comprendre que le code itère également par "." et ".." répertoires dans "themes /"? Il semble que cela provoque des problèmes lorsque vous essayez de décompresser l'archive. – Tamara

+0

ce code provoque un problème lors de la décompression du fichier. –

3

Prenez garde d'un problème possible dans l'exemple de Adnan: Si la myarchive.zip cible se trouve dans le dossier source, alors vous devez l'exclure dans la boucle, ou lance l'itérateur avant de créer le fichier archive (s'il n'existe pas déjà). Voici un script révisé qui utilise cette dernière option, et ajoute quelques variables de configuration en haut. Celui-ci ne doit pas être utilisé pour ajouter à une archive existante.

<?php 
// Config Vars 

$sourcefolder = "./"   ; // Default: "./" 
$zipfilename = "myarchive.zip"; // Default: "myarchive.zip" 
$timeout  = 5000   ; // Default: 5000 

// instantate an iterator (before creating the zip archive, just 
// in case the zip file is created inside the source folder) 
// and traverse the directory to get the file list. 
$dirlist = new RecursiveDirectoryIterator($sourcefolder); 
$filelist = new RecursiveIteratorIterator($dirlist); 

// set script timeout value 
ini_set('max_execution_time', $timeout); 

// instantate object 
$zip = new ZipArchive(); 

// create and open the archive 
if ($zip->open("$zipfilename", ZipArchive::CREATE) !== TRUE) { 
    die ("Could not open archive"); 
} 

// add each file in the file list to the archive 
foreach ($filelist as $key=>$value) { 
    $zip->addFile(realpath($key), $key) or die ("ERROR: Could not add file: $key"); 
} 

// close the archive 
$zip->close(); 
echo "Archive ". $zipfilename . " created successfully."; 

// And provide download link ?> 
<a href="http:<?php echo $zipfilename;?>" target="_blank"> 
Download <?php echo $zipfilename?></a> 
+0

Il ne se décompresse pas. montre une erreur sur unzip. –

Questions connexes