J'ai trouvé ici chez stackoveflow des codes sur la façon de compresser un fichier spécifique, mais qu'en est-il d'un dossier spécifique?
Folder/
index.html
picture.jpg
important.txt
à l'intérieur My Folder
, il y a des fichiers. après avoir compressé le My Folder
, je veux également supprimer tout le contenu du dossier, sauf important.txt
.
Trouvé ceci ici à la pile
J'ai besoin de ton aide. Merci.
Réponses:
Code mis à jour le 22/04/2015.
Zip un dossier entier:
Compressez un dossier entier + supprimez tous les fichiers sauf "important.txt":
la source
$zip->close()
ne fonctionnera pas. Vérifiez ma réponse iciIl existe une méthode utile non documentée dans la classe ZipArchive: addGlob ();
Maintenant documenté sur: www.php.net/manual/en/ziparchive.addglob.php
la source
addGlob
récursif?Essaye ça:
Ce ne sera pas zip récursive cependant.
la source
My folder
, mais j'ai aussi un dossier dans un dossierMy folder
qui me donne une erreur de: Autorisation refusée en dissociant le dossier avec inMy folder
if (!is_dir($file) && $file != 'target_folder...')
place. Ou cochez la réponse @kread si vous souhaitez compresser récursivement, c'est le moyen le plus efficace.My folder
n'est toujours pas supprimé, mais il n'y a quand même plus d'erreurs.$zip->close()
ne fonctionnera pas. Vérifiez ma réponse iciJe suppose que cela fonctionne sur un serveur où l'application zip est dans le chemin de recherche. Cela devrait être vrai pour tous les serveurs basés sur Unix et je suppose que la plupart des serveurs Windows.
L'archive résidera ensuite dans archive.zip. Gardez à l'esprit que les espaces vides dans les noms de fichiers ou de dossiers sont une cause fréquente d'erreurs et doivent être évités dans la mesure du possible.
la source
J'ai essayé avec le code ci-dessous et cela fonctionne. Le code est explicite, veuillez me le faire savoir si vous avez des questions.
la source
ini_set('memory_limit', '512M');
avant l'exécution du script etini_restore('memory_limit');
à la fin. Il fallait éviter le manque de mémoire en cas de dossiers lourds (c'était un dossier de plus de 500 Mo).C'est une fonction qui zippe un dossier entier et son contenu dans un fichier zip et vous pouvez l'utiliser simplement comme ceci:
fonction :
la source
Pourquoi ne pas essayer EFS PhP-ZiP MultiVolume Script ... J'ai compressé et transféré des centaines de concerts et des millions de fichiers ... ssh est nécessaire pour créer efficacement des archives.
Mais je crois que les fichiers résultants peuvent être utilisés avec exec directement à partir de php:
Je ne sais pas si ça marche. Je n'ai pas essayé ...
"le secret" est que le temps d'exécution de l'archivage ne doit pas dépasser le temps imparti pour l'exécution du code PHP.
la source
Voici un exemple de travail de création de ZIP en PHP:
la source
J'ai trouvé cet article dans google comme deuxième meilleur résultat, le premier utilisait exec :(
Quoi qu'il en soit, même si cela ne correspondait pas exactement à mes besoins .. J'ai décidé de publier une réponse pour les autres avec ma version rapide mais étendue de cela.
CARACTÉRISTIQUES DU SCRIPT
Quoi qu'il en soit, sur le script .. Bien que cela puisse paraître beaucoup .. N'oubliez pas qu'il y a un excès ici .. Alors n'hésitez pas à supprimer les sections de rapport si nécessaire ...
De plus, cela peut aussi sembler désordonné et certaines choses pourraient être nettoyées facilement ... Alors ne commentez pas à ce sujet, c'est juste un script rapide avec des commentaires de base ajoutés .. PAS POUR UNE UTILISATION EN DIRECT .. Mais facile à nettoyer pour une utilisation en direct !
Dans cet exemple, il est exécuté à partir d'un répertoire qui se trouve à l'intérieur du dossier racine www / public_html .. Il suffit donc de remonter un dossier pour accéder à la racine.
QU'EST CE QUE ÇA FAIT??
Il compressera simplement le contenu complet de la variable $ pathBase et stockera le zip dans ce même dossier. Il effectue une détection simple des sauvegardes précédentes et les ignore.
SAUVEGARDE CRON
Ce script que je viens de tester sur Linux et a bien fonctionné à partir d'un travail cron en utilisant une URL absolue pour la base de chemin.
la source
Utilisez cette fonction:
Exemple d'utilisation:
la source
Utilisez cela fonctionne bien.
la source
Créez un dossier zip en PHP.
Zip create méthode
Appelez la méthode zip
la source
J'ai fait quelques petites améliorations dans le script.
la source
Cela résoudra votre problème. Essayez-le.
la source
Pour tous ceux qui lisent cet article et recherchent pourquoi compresser les fichiers en utilisant addFile au lieu de addFromString, qui ne compressent pas les fichiers avec leur chemin absolu (il suffit de compresser les fichiers et rien d'autre), voir ma question et ma réponse ici
la source