Le répertoire est quelque chose comme:
home/
file1.html
file2.html
Another_Dir/
file8.html
Sub_Dir/
file19.html
J'utilise la même classe PHP Zip utilisée dans PHPMyAdmin http://trac.seagullproject.org/browser/branches/0.6-bugfix/lib/other/Zip.php . Je ne sais pas comment compresser un répertoire plutôt qu'un simple fichier. Voici ce que j'ai jusqu'à présent:
$aFiles = $this->da->getDirTree($target);
/* $aFiles is something like, path => filetime
Array
(
[home] =>
[home/file1.html] => 1251280379
[home/file2.html] => 1251280377
etc...
)
*/
$zip = & new Zip();
foreach( $aFiles as $fileLocation => $time ){
$file = $target . "/" . $fileLocation;
if ( is_file($file) ){
$buffer = file_get_contents($file);
$zip->addFile($buffer, $fileLocation);
}
}
THEN_SOME_PHP_CLASS::toDownloadData($zip); // this bit works ok
mais lorsque j'essaye de décompresser le fichier zip téléchargé correspondant, j'obtiens "opération non autorisée"
Cette erreur ne se produit que lorsque j'essaie de décompresser sur mon mac, lorsque je décompresse via la ligne de commande, le fichier se décompresse ok. Dois-je envoyer un type de contenu spécifique lors du téléchargement, actuellement 'application / zip'
Réponses:
Voici une fonction simple qui peut compresser n'importe quel fichier ou répertoire de manière récursive, n'a besoin que de l'extension zip pour être chargée.
Appelez ça comme ça:
la source
file_get_contents
et ajoute des chaînes. zip ne prend-il pas en charge l'ajout de fichiers directement?'/'
parDIRECTORY_SEPARATOR
pour que cela fonctionne sous Windows, bien sûr. Sinon, vous vous retrouverez avec le chemin complet (y compris le nom du lecteur) dans votre ZIP, par exempleC:\Users\...
.//
par\
car cela brise réellement le foreach sur Windows. Si vous utilisez le module intégréDIRECTORY_SEPARATOR
comme vous le devriez, il n'est pas nécessaire de le remplacer. C'est le codage en dur/
qui causait des problèmes à certains utilisateurs. J'étais un peu confus quant à la raison pour laquelle j'obtenais une archive vide. Ma révision fonctionnera correctement sous * nix et Windows.Encore un autre archivage d'arborescence de répertoires récursif, implémenté comme une extension de ZipArchive. En prime, une fonction d'aide à la compression d'arbre à instruction unique est incluse. Le nom local facultatif est pris en charge, comme dans les autres fonctions ZipArchive. Code de gestion des erreurs à ajouter ...
la source
J'ai édité la réponse d' Alix Axel pour prendre un troisième argument, en définissant ce troisième argument sur
true
tous les fichiers seront ajoutés sous le répertoire principal plutôt que directement dans le dossier zip.Si le fichier zip existe, le fichier sera également supprimé.
Exemple:
Structure
true
zip du troisième argument :Troisième argument
false
ou structure zip manquante:Code édité:
la source
$maindir
le nom préféré.UTILISATION: thisfile.php? Dir =. / Chemin / vers / dossier (après la compression, le téléchargement commence également :)
la source
Essayez ce lien <- PLUS DE CODE SOURCE ICI
la source
Voici mon code pour Zip les dossiers et ses sous-dossiers et ses fichiers et le rendre téléchargeable au format zip
En cas de problème avec le code, faites-le moi savoir.
la source
J'avais besoin d'exécuter cette fonction Zip sous Mac OSX
donc je fermerais toujours ce .DS_Store ennuyeux.
J'ai adapté https://stackoverflow.com/users/2019515/user2019515 en incluant des fichiers additionalIgnore.
SO pour ignorer le .DS_Store de zip, vous exécutez
zipIt ('/ chemin / vers / dossier', '/path/to/compressed.zip', false, array ('. DS_Store'));
la source
Excellente solution mais pour mon Windows, j'ai besoin de faire des modifications. Sous le code de modification
la source
Ce code fonctionne à la fois pour Windows et Linux.
la source
Voici ma base de version sur Alix, fonctionne sur Windows et, espérons-le, sur * nix aussi:
la source
Voici la fonction récursive simple, facile à lire qui fonctionne très bien:
la source
Suite à la réponse @ user2019515, je devais gérer les exclusions de mes archives. voici la fonction résultante avec un exemple.
Fonction Zip:
Comment l'utiliser :
la source