compresser/dossier d'archive à l'aide de script php
Est-il un moyen de compresser/archiver un dossier dans le serveur à l'aide de script php .zip ou .rar ou pour tout autre format de compression, de sorte que, sur demande, on peut archiver le dossier et de donner ensuite le lien de téléchargement
<?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 =newZipArchive();//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 =newRecursiveIteratorIterator(newRecursiveDirectoryIterator("themes/"));//iterate over the directory//add each file found to the archiveforeach($iterator as $key=>$value){
$zip->addFile(realpath($key), $key)ordie("ERROR: Could not add file: $key");}//close and save archive
$zip->close();
echo "Archive created successfully.";?>
grand code... comment puis-je modifier cela pour compresser un dossier imbriqué à l'exclusion de tous les dossiers qui y a conduit? mon dossier de votre choix de vie à "/var/www/vhosts/monsite.com/dev/wp-content/themes/mytheme/". lorsque j'exécute ce script, j'obtiens un dossier de départ du var puis www puis vhosts alors mysite.com etc. ce qui me manque? Dois-je comprendre le droit que le code itère aussi par "." et ".." répertoires à l'intérieur des "thèmes"/"? Il ressemble à ceci pose des problèmes lorsque vous essayez de décompresser l'archive. ce code provoque problème lors de la décompression de fichier.
Méfiez-vous d'un possible problème dans Adnan exemple: Si la cible myarchive.zip est à l'intérieur du dossier source, alors vous avez besoin pour l'exclure dans la boucle, ou à exécuter l'itérateur avant de créer le fichier d'archive (si elle n'existe pas déjà). Voici une version révisée du script qui utilise la dernière option, et ajoute quelques config vars-haut. Ce que l'on ne devrait 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 =newRecursiveDirectoryIterator($sourcefolder);
$filelist =newRecursiveIteratorIterator($dirlist);//set script timeout value
ini_set('max_execution_time', $timeout);//instantate object
$zip =newZipArchive();//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 archiveforeach($filelist as $key=>$value){
$zip->addFile(realpath($key), $key)ordie("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>
Il n'est pas décompresser. d'erreur s'affiche sur unzip.
Voici un exemple:
Dois-je comprendre le droit que le code itère aussi par "." et ".." répertoires à l'intérieur des "thèmes"/"? Il ressemble à ceci pose des problèmes lorsque vous essayez de décompresser l'archive.
ce code provoque problème lors de la décompression de fichier.
OriginalL'auteur Adnan
Méfiez-vous d'un possible problème dans Adnan exemple: Si la cible myarchive.zip est à l'intérieur du dossier source, alors vous avez besoin pour l'exclure dans la boucle, ou à exécuter l'itérateur avant de créer le fichier d'archive (si elle n'existe pas déjà). Voici une version révisée du script qui utilise la dernière option, et ajoute quelques config vars-haut. Ce que l'on ne devrait pas être utilisé pour ajouter à une archive existante.
OriginalL'auteur Potion
PHP est livré avec le ZipArchive extension, qui est juste juste pour vous.
OriginalL'auteur cweiske