Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

PHP ZIP recursif à partir de la racine


Sujet :

Langage PHP

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    décembre 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Associations - ONG

    Informations forums :
    Inscription : décembre 2015
    Messages : 3
    Points : 1
    Points
    1
    Par défaut PHP ZIP recursif à partir de la racine
    Bonjour amis développeurs, en tant que débutant en PHP, je viens de récupérer ce script qui permet de zipper de manière récursive des dossiers :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    <?php
     
    /*
    		Description :
    			Fonction récursive zippant le contenu du répertoire passé en paramètre, incluant tous les sous dossiers et tous les fichiers
    		
    		Note :
    			Le script doit avoir les autorisations adéquates pour le dossier de destination !
    			
    		Prototype :
    			bool zipper_repertoire_recursif ( string $nom_archive , string $adr_dossier [, string $dossier_destination] )
    			/!\ Les paramètres $zip et $dossier_base ne doivent pas être modifiés /!\
    		
    		Paramètres :
    			string $nom_archive         : le nom de l'archive qui sera créée se terminant par '.zip' (ex. 'archive.zip', 'test.zip', etc.)
    			string $adr_dossier         : le dossier à archiver (ex. 'images', '../dossier1/dossier2', etc.)
    			string $dossier_destination : le dossier dans lequel placer l'archive une fois celle-ci créée (ex. 'images/zip', '../archives', etc.)
    			
    		Retourne :
    			True si ça a marché, false le cas échéant
    */
    function zipper_repertoire_recursif($nom_archive, $adr_dossier, $dossier_destination = '', $zip=null, $dossier_base = '') {
    	if($zip===null) {
    		// Si l'archive n'existe toujours pas (1er passage dans la fonction, on la crée)
    		$zip = new ZipArchive();
    		if($zip->open($nom_archive, ZipArchive::CREATE) !== TRUE) {
    			// La création de l'archive a échouée
    			return false;
    		}
    	}
    	 if (!is_dir($dossier_destination)) mkdir ($dossier_destination, 0777);
    	if(substr($adr_dossier, -1)!='/') {
    		// Si l'adresse du dossier ne se termine pas par '/', on le rajoute
    		$adr_dossier .= '/';
    	}
     
    	if($dossier_base=="") {
    		// Si $dossier_base est vide ça veut dire que l'on rentre
    		// dans la fonction pour la première fois. Donc on retient 
    		// le tout premier dossier (le dossier racine) dans $dossier_base
    		$dossier_base=$adr_dossier;
    	}
     
    	if(file_exists($adr_dossier)) {
    		if(@$dossier = opendir($adr_dossier)) {
    			while(false !== ($fichier = readdir($dossier))) {
    				if($fichier != '.' && $fichier != '..') {
    					if(is_dir($adr_dossier.$fichier)) {
    						$zip->addEmptyDir($adr_dossier.$fichier);
    						zipper_repertoire_recursif($nom_archive, $adr_dossier.$fichier, $dossier_destination, $zip, $dossier_base);
    					}
    					else {
    						$zip->addFile($adr_dossier.$fichier);
    					}
    				}
    			}
    		}
    	}
     
    	if($dossier_base==$adr_dossier) {
    		// On ferme la zip
    		$zip->close();
     
    		if($dossier_destination!='') {
    			if(substr($dossier_destination, -1)!='/') {
    				// Si l'adresse du dossier ne se termine pas par '/', on le rajoute
    				$dossier_destination .= '/';
    			}
     
    			// On déplace l'archive dans le dossier voulu
    			if(rename($nom_archive, $dossier_destination.$nom_archive)) {
    				return true;
    			}
    			else {
    				return false;
    			}
    		}
    		else {
    			return true;
    		}
    	}
    }
     
    ?>
    Cependant, les zips que je crées sont à partir de la racine envoyées et donc j'ai 5 dossiers vide avant d'arriver au dossier que je veux zipper.
    Si quelqu'un peut m'aider en m'expliquant ce que je pourrais modifier pour ne pas avoir tous ces dossiers mais que le dossier mis en argument $adr_dossier ?

    En vous remerciant d'avance !
    Likek

  2. #2
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    décembre 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Associations - ONG

    Informations forums :
    Inscription : décembre 2015
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Up ?

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    décembre 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Associations - ONG

    Informations forums :
    Inscription : décembre 2015
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    1 mois après, toujours sans résolution, j'apprécie toute aide apportée (au futur !) merci.
    Likek

  4. #4
    Membre éprouvé
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    mai 2004
    Messages
    838
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : mai 2004
    Messages : 838
    Points : 1 043
    Points
    1 043
    Par défaut
    Bonjour

    Jete un oeil à mon script https://github.com/cavo789/joomla_fr...rc/zip/zip.php qui n'a pas le souci que tu évoques.

    Bonne programmation
    Christophe (cavo789)
    Logiciel gratuit de scan antivirus : https://github.com/cavo789/aesecure_quickscan
    Mes logiciels OpenSource : https://www.avonture.be

Discussions similaires

  1. Php Zip et dossier racine
    Par juixo dans le forum Langage
    Réponses: 3
    Dernier message: 24/03/2011, 20h32
  2. [MySQL] Mysql/php graph a partir BDD
    Par yanick dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 25/02/2009, 05h24
  3. [MySQL] PHP Print table à partir de MySQL DB
    Par l4cky dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 01/07/2008, 23h03
  4. Réponses: 7
    Dernier message: 26/03/2007, 13h17
  5. [MySQL] PHP afficher a partir d'une liste déroulante
    Par marie4449 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 24/11/2006, 10h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo