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