Page 1 sur 1

ZipArchive - Ne pas mettre les dossiers courants et parents dans l'arborescence

Posté : 14 juil. 2019, 10:53
par altozinzin
Salut à tous.
Voila, j'ai codé un petit bout de code en m'inspirant d'autres codes. Le but: créer un fichier ZIP qui contienne tous les fichiers d'un dossier, en respectant l'arborescence et de manière récursive pour les sous-dossiers.

Le code marche plutôt bien mais, quand j'ouvre l'archive, j'ai un dossier ".", qui contient un dossier "_" qui lui même contient enfin le dossier scanné.
Ma question: qu'est-ce qui "merde" dans mon code qui me créé ces deux dossiers un peu gênant. Sinon le code est fonctionnel, pas de soucis de ce côté là.
D'avance merci
function ScanDirectoryZip($Directory){

global $zip;

$MyDirectory = opendir($Directory) or die('Erreur');
while($Entry = @readdir($MyDirectory)) {
	// si c'est un dossier, on le créé dans le zip
if(is_dir($Directory.'/'.$Entry) && $Entry != '.' && $Entry != '..') {
	
$zip->addEmptyDir($Directory.'/'.$Entry);
ScanDirectoryZip($Directory.'/'.$Entry);

}
// si c'est un fichier, on l'ajoute à l'archive
else if ($Entry != '.' && $Entry != '..'){

$zip->addFile($Directory."/".$Entry);

}

}
closedir($MyDirectory);
}

Re: ZipArchive - Ne pas mettre les dossiers courants et parents dans l'arborescence

Posté : 15 juil. 2019, 14:06
par @rthur
"." représente le dossier courant.
".." représente le dossier parent.
Es-tu sûr que ce n'est pas ton logiciel qui lit les fichiers zip qui te les fait apparaitre automatiquement ?

Re: ZipArchive - Ne pas mettre les dossiers courants et parents dans l'arborescence

Posté : 15 juil. 2019, 17:21
par altozinzin
Je ne pense pas.
J'ai un plus de précision:

Ce me faisait ça quand je testais le site en localhost.

J'ai testé en le mettant sur un serveur Linux en local, là y'a carrément toute l’arborescence qui apparaît.
Du genre, un dossier "_", puis un dossier "Volume1", puis web, puis www, ...

Re: ZipArchive - Ne pas mettre les dossiers courants et parents dans l'arborescence

Posté : 15 juil. 2019, 17:22
par altozinzin
Je précise: j'utilise 7Zip et il fonctionne normalement pour les autres archives

Re: ZipArchive - Ne pas mettre les dossiers courants et parents dans l'arborescence

Posté : 16 juil. 2019, 18:47
par Saian
Salut, il n'y a pas vraiment de logique à cela si ce n'est que lors de l'appel initial à ScanDirectoryZip tu fasses par exemple un ScanDirectoryZip('/'). On ne voit d'ailleurs pas cet appel initial ni la manière dont tu initialises la variable $zip.

Re: ZipArchive - Ne pas mettre les dossiers courants et parents dans l'arborescence

Posté : 16 juil. 2019, 21:20
par altozinzin
Voici le code d'appel de la commande:
// on commence à creer l'archive
	
	$dossier_sortie = "./zips/".$id.".zip";
	$zip = new ZipArchive();
	 $zip->open($dossier_sortie, ZipArchive::CREATE|ZipArchive::OVERWRITE);
	 
	 
	 // on scanne le dossier
 $Directory = $_POST['chemin']."/".$_POST['nom_fichier'];

  
 ScanDirectoryZip($Directory);

  
  $zip->close();

le $_POST['chemin'] est un chemin relatif

Re: ZipArchive - Ne pas mettre les dossiers courants et parents dans l'arborescence

Posté : 10 août 2019, 10:40
par altozinzin
Je me permets de remonter le sujet pour voir si quelqu'un à la solution. Merci

Re: ZipArchive - Ne pas mettre les dossiers courants et parents dans l'arborescence

Posté : 25 oct. 2020, 14:04
par JME44
Bonjour,

altozinzin écrit @readdir comme je l'ai vu par ailleurs.
J'ai utilisé @readdir et readdir et obtenu le même résultat. (je suis en 7.2)

Que change le préfixe @ devant une fonction ?

Merci

Re: ZipArchive - Ne pas mettre les dossiers courants et parents dans l'arborescence

Posté : 25 oct. 2020, 15:14
par Spols
le prefix @ avant une fonction évite simplement l'affichage d'erreur liè à cette fonction.

je déconseille en phase de test, et en phase de prod, il vaut mieux mettre un catch try pour capture l'erreur mais c'est une pratique répandue pour certaine fonction

Re: ZipArchive - Ne pas mettre les dossiers courants et parents dans l'arborescence

Posté : 25 oct. 2020, 19:09
par JME44
Merci