Fonctionnement de ZipArchive

CHERPIN
Invité n'ayant pas de compte PHPfrance

13 sept. 2019, 17:09

Bonjour,
Je reviens vers vous, car je n'ai toujours pas réglé mon problème de fichier zip.
Je suis dans un répertoire PHOTOS chez un hébergeur. (www.abcdefg/PHOTOS/)
Ce répertoire comporte différents dossiers de villes : exemple PARIS,LYON,GENEVE etc.......
qui eux-memes sont remplis de photos. Je souhaite pouvoir les télécharger sur un ordinateur tiers.
J'ai simplifié au maximum le script suivant pour bien comprendre.

Code : Tout sélectionner

<?php $dir = "PARIS"; $zip = new ZipArchive(); $filename = "cif.zip"; if ($zip->open($filename, ZipArchive::CREATE)!==TRUE) { exit("Impossible d'ouvrir le fichier <$filename>\n"); }else{ if (is_dir($dir)) { if ($dh = opendir($dir)) { echo "j'ai ouvert le dossier PARIS".'<br>'; while (($file = readdir($dh)) !== false) { echo $file.'<br>';// pour vérification $zip->addFile($file); } } closedir($dh); // Je ferme le dossier PARIS } $zip->close(); // echo 'Je ferme le fichier cif.zip'.'<br>'; } ?>
Je suis dans le dossier PHOTOS. Je crée un fichier cif.zip

Code : Tout sélectionner

if($zip->open($filename, ZipArchive::CREATE)!==TRUE)
Pour remplir le fichier zip j'ajoute les fichiers de photos contenus dans un dossier (ici : www.abcdefg/PHOTOS/PARIS/)
Pour clore le fichier zip avec $zip->close(); je ne peux pas et j'obtiens le message suivant :
Warning: ZipArchive::close(): Read error: Is a directory in www/..../CIF/PHOTOS/ziparchive.php on line 20
ce qui laisse supposer que je ne suis pas dans le bon répertoire pour fermer zip.
Comment faire, dans la commande close() pour changer de répertoire et revenir au répertoire PHOTOS ?

Je pense que là est l'incompréhension.
Merci de bien vouloir m'aider.

Mammouth du PHP | 1168 Messages

13 sept. 2019, 17:25

echo $file.'<br>';// pour vérification
$zip->addFile($file);
$file ne contient que le nom du fichier, php cherche donc le fichier dans le répertoire du script php or le fichier voulu n'est pas dans ce répertoire, donc cela ne fonctionne pas.