Archiver un dossier et son contenu en vue d'un téléchargement

Bonjour,
Je souhaite proposer à mes utilisateurs de télécharger le contenu de leur espace de travail personnel.
Je veux donc archiver ce dossier, et proposer au téléchargement un fichier au format .zip (ou autre…)

Après pas mal de recherches sur gogol, je sèche un peu.
J’ai souvent vu l’utilisation de “pclzip.lib.php” (téléchargé sur www.phpconcept.net… ) mais je ne comprends pas comment l’utiliser.

Pouvez vous m’aider?:wink:

Merci!

Merci.

J’ai fini par combiner les 2 choses que je voulais:

  • compresser un dossier
  • le proposer en téléchargement.

Voilà le code:


<?php
$dossier = $_POST['dossier'];
$NomFich = "$dossier.zip";
  
include_once('pclzip.lib.php');
$archive = new PclZip($dossier.'.zip');
$v_list = $archive->create($dossier);
if ($v_list == 0) {    die("Error : ".$archive->errorInfo(true));    }
 
header("content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=" .$NomFich);
readfile($NomFich); // Envoie le fichier
flush(); // vide le buffer
	
unlink($NomFich);
	
?> 

C’est un peu fouilli, mais je ne suis pas un pro de la syntaxe…

Merci!
Edité le 01/02/2009 à 17:10

Nouvelle demande:
Je souhaiterai que l’archive que j’extrait ne comprenne pas un fichier situé à la racine du dossier, et nommé index.php.

Alors j’ai tapé ceci, mais ça ne m’enlève pas ce fichier:


<?php
$dossier = $_POST['dossier'];
$NomFich = "$dossier.zip";
  
include_once('pclzip.lib.php');
$archive = new PclZip($dossier.'.zip');
$v_list = $archive->create($dossier);
$error = $archive->delete($dossier,'./index.php');

if ($v_list == 0) {    die("Error : ".$archive->errorInfo(true));    }
 
header("content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=" .$NomFich);
readfile($NomFich); // Envoie le fichier
flush(); // vide le buffer
	
unlink($NomFich);
  
?> 

A noter aussi qu’il y a un souci avec la gestion des accents…

Je regarderai ça demain!
Merci.
Edité le 01/02/2009 à 20:13

Euh…un peu compliqué la première partie, non?

J’y suis arrivé avec l’option delete(PCLZIP_OPT_BY_NAME, …)
J’avais juste une erreur de syntaxe.

Ce qui donne au final:


<?php
$dossier = $_POST['dossier'];
$NomFich = "$dossier.zip";

  
include_once('pclzip.lib.php');


$archive = new PclZip($dossier.'.zip');
$v_list = $archive->create($dossier);
$error = $archive->delete(PCLZIP_OPT_BY_NAME, $dossier.'/index.php');


if ($v_list == 0) {    die("Error : ".$archive->errorInfo(true));    }
 
header("content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=" .$NomFich);
readfile($NomFich); // Envoie le fichier
flush(); // vide le buffer
	
unlink($NomFich);
  
?> 

Et sinon, que penses-tu du souci d’accent?
Un dossier nommé Découverte se retrouve nommé Dùcouverte…

Non. C’est à cause de l’encodage. Tu as deux choix 1) soit ta librairie ne supporte pas l’utf-8, et tu es dans la merde :slight_smile: 2) soit tu peux lui préciser en entrée que les noms des dossiers sont dans tel encodage, et en principe, tu peux espérer qu’elle sache les réimporter correctement.

Moralité: évite les accents dans les noms des fichiers et dossiers, tout simplement. … ou change de librairie :slight_smile: (perso, j’aurai utilisé 7-zip + system:))