Bonjour,
sur un projet j'utilise jqueryfiletree pour lister le contenu d'un repertoir.
Lorsque je liste ce répertoir, j'affiche un bouton de téléchargement à côté de chaque dossier et j'effectue une action si je clique sur un fichier.
Je rencontre un problème pour télécharger le repertoir choisi. Je récupère bien le nom, chemin du repertoir choisis mais après je ne parviens pas a faire le zip
public function zip()
{
/*
* ROOT -> Apps/
* $_get['rep'] -> /web/dossiers/
*/
$rep = $_GET['rep'];
$name = end(explode('/', $rep));
$zip_name = $name.'.zip'; // nom du fichier zip que l'on veut
$path = ROOT.$rep.'/'; // repertoire que l'on veut zipper
$new_path = ROOT.'/web/zip/';
$rep = $this->newZip($path, $new_path, $zip_name);
var_dump($rep);die;
if($rep === true){
header('Location: index.php?p=dossier.index');
}else{
$alert = new Alert();
$alert->setFlash("Un problème est survenu lors du téléchargement du fichier", "Erreur", "error");
header('Location: index.php?p=dossier.index');
}
}
private function newZip($path, $new_path, $zip_name)
{
// On instancie la classe.
$zip = new ZipArchive();
if(is_dir($path)){
// On teste si le dossier existe, car sans ça le script risque de provoquer des erreurs.
if($zip->open($zip_name, ZipArchive::CREATE) == TRUE){
// Ouverture de l’archive réussie.
// Récupération des fichiers.
$fichiers = scandir($path);
// On enlève . et .. qui représentent le dossier courant et le dossier parent.
unset($fichiers[0], $fichiers[1]);
foreach($fichiers as $f){
// Si c'est un dossier on relance la fonction
if(is_dir($f)) {
$this->newZip($path.$f, $new_path, $zip_name);
}// sinon c'est un fichier donc on l'ajoute à l'archive
else {
$zip->addFile($new_path.$f);
}
}
// On ferme l’archive.
$zip->close();
// On peut ensuite, comme dans le tuto de DHKold, proposer le téléchargement.
header('Content-Transfer-Encoding: binary'); //Transfert en binaire (fichier).
header('Content-Disposition: attachment; filename="'.$zip_name.'"'); //Nom du fichier.
header('Content-Length: '.filesize($zip_name)); //Taille du fichier.
readfile($zip_name);
return true;
}else {
// Erreur lors de l’ouverture.
// On peut ajouter du code ici pour gérer les différentes erreurs.
echo 'Erreur, impossible de créer l'archive.';
return false;
}
}else{
// Possibilité de créer le dossier avec mkdir().
echo 'Le dossier "upload/" n'existe pas.';
return false;
}
}