Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

CLASSE PERMETTANT DE ZIPPER UNE LISTE DE FICHIERS OU UN DOSSIER (ET SOUS-DOSSIERS) EN AUTOMATIQUE


Information sur la source

Catégorie :Fichier / Disque Classé sous : zip, archiver, sauvegarde, automatique, zipper Niveau : Initié Date de création : 03/07/2006 Date de mise à jour : 28/07/2007 17:38:56 Vu / téléchargé: 6 694 / 1 185

Note :
9,25 / 10 - par 4 personnes
9,25 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (17)
Ajouter un commentaire et/ou une note

Description

Ce code est issu d'une remarque trouvée sur le site http://www.phpcs.com
A la suite d'une source de Malik7934 montrant un formulaire d'upload permettant de créer un fichier ZIP à partir de ce fichier envoyé, un commentaire demandait s'il serait possible de gérer un dossier ou une liste de fichiers de façon automatique

Du coup l'idée m'est venue d'écrire ce code pour mon besoin propre :
faire une sauvegarde Zippée avant une mise à jour ou un test comportant des opérations complexes, etc.

Si le fichier Zip à créer n'est pas nommé, un nom automatique lui est affecté : 'Sauvegarde JJ/MM/AAAA HhMmSs.zip'

Cette classe s'appuie sur l'excellente bibliothèque pclZip découverte par hasard sur le formulaire cité ci-dessus via http://www.phpcs.com.

Le site : http://www.phpconcept.net/phpzip/index.php permet de récupérer la dernière version (2.5 à la rédaction de ces lignes)
ainsi que la documentation. D'autres sources sont d'ailleurs mises à disposition pour gérer d'autres formats de compression...

La classe Zipper a donc pour but de simplifier à l'extrême la création d'une archive ZIP contenant :
- soit une liste de fichiers
- soit un dossier et tout son contenu.

testé sous PHP5 en local, vous devriez pouvoir l'utiliser en PHP4 en modifiant les mots protected par var juste en-dessous de ces lignes d'explication. Je ne l'ai pas testé sur une serveur Linux !

Les methodes fournies permettent d'en modifier le fonctionnement, mais quasiment rien n'est obligatoire...


REMARQUE : merci aux gourous de ne pas m'assassiner, ce code est ma première contribution faite essentiellement pour remercier tous ceux dont j'ai pu lire et utiliser des bouts de code voire parfois la totalité dans mes projets.

AUTRE REMARQUE : ce code est aussi mon premier code objet... ma première classe. Issu de la vieille école de programmation, j'ai mis longtemps à trouver un intérêt aux objets (j'ai honte...)

Merci de vos critiques et remarques dès l'instant où c'est constructif !
 

Source

  • // Voilà un appel : le plus simple possible :
  • $archive = new Zipper(); // Création de l'objet
  • $archive->DefinitNomDossierAZipper('Galeries'); // Indique le dossier à explorer et dont le contenu doit être 'Zippé'
  • if(! $archive->ZipperFichiers()){ echo 'ECHEC'; } // Affiche un message en cas d'échec
// Voilà un appel : le plus simple possible :

$archive = new Zipper();				// Création de l'objet
$archive->DefinitNomDossierAZipper('Galeries');		// Indique le dossier à explorer et dont le contenu doit être 'Zippé'
if(! $archive->ZipperFichiers()){ echo 'ECHEC'; }	// Affiche un message en cas d'échec

Conclusion

Je pensais éventuellement à envoyer ce ZIP par mail en fin de traitement si on le demande : cela étant, il y a plein de classes disponibles ici capable de le faire...


 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

03 juillet 2006 00:57:20 :
Changement simple de catégorie
20 février 2007 16:58:57 :
Correction bogue : REMARQUE : bogue détecté vers la ligne 290 : corriger : $this->nomZip = 'Sauvegarde '.date('Y-m-d H\hm\ms\s'); par : $this->nomZip = 'Sauvegarde '.date('Y-m-d H\hi\ms\s'); Ce n'est pas une erreur grave, mais c'est mieux sans erreur !
28 juillet 2007 17:38:56 :
Meilleurs commentaires et corrections de bogues mineurs suite à quelques remarques

Commentaires et avis

signaler à un administrateur
Commentaire de kankrelune le 03/07/2006 23:32:39

Salut... j'ais pas regardé le code mais le principe est utile... par contre... .. .

$archive = new Zipper();  
if(!$archive->ZipperFichiers('Galeries'))
     echo 'ECHEC';

Aurait peut être été plus simple à l'utilisation... .. .

Voili voilou... je ne note pas n'ayant pas vu le code je jetterais un coup d'oeil quand j'aurais le temps... .. .

@ tchaOo°

signaler à un administrateur
Commentaire de GNVA Dfx le 04/07/2006 08:25:09

Franchement Bravo !

Sa me casse un peux quand je vois tous le boulot, sa me décourage. Non mais franchement quand on vois le niveau du gas ! On peut tous rentré à la maison.

Bravo !

signaler à un administrateur
Commentaire de stepibou le 04/07/2006 11:02:34

"j'ai honte... " non pourquoi?
c'est bien commenté...
Par contre : peut etre informer l'auteur de pclzip de ton code...
Pour le xhtml : b deviens strong ... please
a+
bon code

signaler à un administrateur
Commentaire de guill76 le 04/07/2006 22:54:26

Salut,
Génial la librairie,
par contre j'essaie depuis ce soir de zipper en utilisant les options prédéfinies, et j'arrive toujours pas à constituer une archive à extraire sans le path absolu.
Ce serait plutôt con si l'option du chemin relatif n'existait pas.En tout cas Je cherche toujours.

signaler à un administrateur
Commentaire de guill76 le 07/07/2006 21:11:59

Désolé : c'était une erreur de paramètres (ça marche très bien j'ai pas le chemin absolu) et pas un problème d'options : je vais me donner des baffes si ça continue.La prochaine fois je douterai de moi même avant de mettre en cause un possible bug. C'est une putain de déformation professionnelle.Je m'en veux terriblement(non terriblement là j'éxagère)  

signaler à un administrateur
Commentaire de FhX le 09/07/2006 17:15:05

"Pour le xhtml : b deviens strong ... please"
Totalement faux. C'est de l'hérésie que de dire un truc pareil :o

Pour preuve :
http://css.alsacreations.com/Tutoriels-et-articles-divers/strong-b-em-i-quelle-balise-utiliser-et-pourquoi

avec je cite :
L'argument est de dire que les balises <i> et <b> n'apportent aucun sens (sémantique) au document contrairement aux éléments <strong> et <em> qui sont des mises en exergue.
Or il faut bien comprendre qu'une mise en italique et une mise en gras n'implique pas forcément que le texte doit être plus important. Si c'est souvent le cas, il ne faut pas penser que les balises sont équivalentes.

Attention à ne pas dire n'importe quoi :)

signaler à un administrateur
Commentaire de guill76 le 09/07/2006 17:30:22

Aller,
Au bûcher Stepibou, l'ensorcelé accusé d'hérésie.:-)
  

signaler à un administrateur
Commentaire de stepibou le 09/07/2006 19:27:02

bon, d'ac!!

<span class="gras">blabla</span>

feuille de style :

.gras { font-weight: bold; }

Comme ca , tout le monde est content..

bon code php et html a vous!

signaler à un administrateur
Commentaire de FhX le 10/07/2006 12:54:18

Faire un span pour mettre en gras est aussi du grand n'importe quoi.
La balise span n'est pas fait pour avoir une classe de gras ou d'italique au cul :)

Pour mettre en gras :
<b>
<strong>

T'imagine si tu dois faire ca ?
<p>Salut <span class="gras">xxx</span>. Aujourd'hui, il est :<span class="gras">xxxhxxminxsec</span>. Tu as <span class="gras">xxxxxx nouveaux messages</span></p>.

Beurk :/
==>
<p>Salut <b>xxx</b>. Aujourd'hui, il est <b>xxxhxxminxsec</b>. Tu as <b>xxxxx nouveaux messages</b></p>

Pourquoi vouloir faire de la feuille de style à tout prix ? Si c'est juste pour mettre des parties en gras ?
Ici, je ne peux utiliser <strong></strong> car il n'y a rien à mettre à l'évidence ( schémantiquement parlant), donc j'utilise une balise <b> à la place. Tu peux utiliser span, mais tu y perds beaucoup pour pas grand chose !

Voila :)

signaler à un administrateur
Commentaire de vduffaut le 22/07/2006 12:53:31

Merci à tous de vos commentaires. Etant en déplacement pendant quelque temps je n'ai eu connaissances de ceux-ci qu'hier soir.

KANKRELUNE : j'aime bien mon écriture du test en une seule ligne mais je laisse libre chacun de choisir. Je voulais juste faire le plus concis possible.

GNVA : J'ai quelques années de programmation professionnelles derrière moi. En bossant on arrive toujours au but. Courage !

STEPIBOU : Honte parce je n'envoyais pas l'intérêt jusqu'à ce que le nombre de paramètres de cette classe me fasse penser que tout aurait été plus simple si j'avais commencé par écrire en mode objet plutôt que procédural. Mais je commence à perdre pied lorsqu'un objet utilise un sous-objet...
a->b->propriété. Pour les balises, voir ci-dessous avec le commentaire de FHX. Pour l'auteur de PCLLIB, tu as raison : je n'y avais pas songé et son source est tellement puissant qu'il mérite cette info.

FHX : AlsaCreations est effectivement de bon conseil (je vais souvent consulter les articles de ce site de référence) et je continuerai à utiliser <b>, <u> et <i> car la rapidité de saisie est incomparable et l'effet exactement celui désiré : modifier l'affichage (merci FHX pour cette indication).

Commentaire à tous : personne n'a noté ? Allez, un petit effort !

signaler à un administrateur
Commentaire de _klesk le 04/01/2007 22:00:55

Merci pour cette source que je cherchai depuis un moment.

Cepandant ne maitrisant pas le system de class, j'aimerai pouvoir forcer le telechargement au lien d'arriver sur ;

"Il est accessible en cliquant sur ce lien"

j'ai bien essayer avec

// entêtes HTTP
header('Content-Type: application/x-zip');
// force le téléchargement
header('Content-Disposition: inline; filename='.$this->arch'.zip');

mais forcement il me dit que les entete sont déja envoyer.

Merci de votre aide

signaler à un administrateur
Commentaire de vduffaut le 28/07/2007 17:53:08

Désolé de ne pas avoir répondu plus rapidement mais j'ai eu de gros soucis de santé... dont je commence à voir la fin.

Pour éviter ce message il suffit d'utiliser ob_start() avant l'appel et ob_clean() au sortir de l'appel : ensuite le code que vous indiquez devrait fonctionner

Cela dit j'espère que vous aviez résolu ce problème...

signaler à un administrateur
Commentaire de tiyo97 le 01/08/2007 15:03:18

Salut
Et moi qui cherchait un moyen de creer des zip à la volée...me voila servi lol
merci pour cette contrib

par contre, y'aurait-il un moyen de renommer les fichiers à archiver?

signaler à un administrateur
Commentaire de vduffaut le 01/08/2007 20:03:45

Le mieux est à mon sens d'utiliser les fonctions natives de PHP !

Sinon, une exploration de pclzip pourrait aussi convenir, mas à ce moment-là ma contribution perd de son intérêt -:)

signaler à un administrateur
Commentaire de tiyo97 le 02/08/2007 11:06:12

merci pour ta reponse
en fait j'ai renommé les fichiers avant de faire appel à ta contribution ^o^

signaler à un administrateur
Commentaire de ryu2005 le 04/11/2007 13:51:54

Bonjour

ça marche pas ton truc mon ami !
voilà le message

Parse error: parse error, expecting `T_OLD_FUNCTION' or `T_FUNCTION' or `T_VAR' or `'}'' in c:\program files\easyphp1-8\www\class_zipper.php on line 64

alors essaye de me dire c'est quoi le problème, alors avec php5.3 c'est rien aucune réponse !, aucune interface !

j'attend une réponse mon ami

salut

signaler à un administrateur
Commentaire de vduffaut le 04/11/2007 22:46:52

Comme indiqué plus haut :

<?php
include('Class_Zipper.php');
// Voilà un appel : le plus simple possible :

$archive = new Zipper(); // Création de l'objet
$archive->DefinitNomDossierAZipper('../Classe Zip'); // Indique le dossier à explorer et dont le contenu doit être 'Zippé'
if(! $archive->ZipperFichiers()){ echo 'ECHEC'; } // Affiche un message en cas d'échec
?>

et voici le résultat avec PHP5 version 5.2.3 (ôter les étoiles) :
***************************
Le contenu a été zippé et porte maintenant comme nom  (archives/Sauvegarde 2007-11-04 22h11m03s.zip).
Il est accessible en cliquant sur ce lien
***************************

Le dossier "archives" qui n'existait pas a été créé...
Bonne utilisation !

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

archiver un dossier et ses sous dossiers (zip ou rar) [ par mictif ] bonjour, j'essaie de me documenter sur l'archivage de dossier en php mais je ne trouve rien de tres explissite pour mon petit niveau en php.... commen Sauvegarde automatique de bdd [ par switsh ] Bonjour J'ai cr&#233;&#233; un site avec bdd dans lequel je rentre des informations. Le contenu du site est important et si jamais mon h&#233;bergeur Zip de dossier en php [ par isaac_nkubi ] Bonjour, J'aimerai savoir d&#233;j&#224; si c'est possible de mettre dans un zip un fichier entier et son contenu, si oui quelqu'un pourrait me dire Sauvagere complete [ par piep14 ] Bonjour, je souhaite faire une sauvegarde r&#233;guli&#232;re de mon site !!! J'ai essay&#233; en faisant : &lt;? echo "Sauvegarde des fichiers "; $l redirection automatique en fonction de la disponibilité d'un serveur [ par cfgservices ] Mon site existe sur 2 serveurs ( 1 principal + 1 de sauvegarde ).Je souhaiterais cr&#233;er une redirection automatique en fonction de la r&#233;ponse Créer un fichier Zip [ par Thienou ] Salut &#224; tous, J'aimerais savoir si il &#233;tait possible des cr&#233;er un fichier zip avec des images dans celui-ci. Je sais qu'on peut en cr& Affichage d'une pub automatique [ par trilo ] bonjour &#224; tous, J'aimerais vous poser une petite questions programmation... J'ai un serveur qui me permet d'heberger quelques sites web en sous redirection automatique [ par err747 ] Salut &#224; tous Je voudrai faire en sorte que quand on arrive sur la page d'accueil de mon site, la personne puisse &#234;tre redirig&#233;e vers u Rapatriement automatique d'un site web en local [ par impactweb ] Bonjour j'aimerais rapatrier automatiquement un site web et sa base de donner en local tous les x jours. Il faudrait qu'il ne t&#233;l&#233;charge que Soumission automatique des formulaires [ par elmekki ] Bonsoir,Je souhaite savoir s'il &#233;tait possible,via php, de soumettre automatiquement&nbsp;des formulaires des autres sites&nbsp;en cliquant sur u


Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,421 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.