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
    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
    Up ?

  3. #3
    Nouveau Candidat au Club
    1 mois après, toujours sans résolution, j'apprécie toute aide apportée (au futur !) merci.
    Likek

  4. #4
    Membre éprouvé
    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

###raw>template_hook.ano_emploi###