Bonjour a tous,
j'utilise la class ZipArchive pour générer une archive d'une arborescence.
Voici ma class:
Et voici mon fichier qui utilise la class:
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98 <?php /** * Class permettant de faire des archives * @author Hannibal */ class ZipBackup extends ZipArchive { /** * Constructeur de la class * $nom = nom de l'archive * $flag = flag d'ouverture de l'archive * $commentaire = commentaire sur l'archive */ public function __construct($nom, $flag = ZIPARCHIVE::CREATE, $commentaire = ""){ // Si le flag nous indique que l'archive doit etre créé (elle n'existe pas) if($flag == ZIPARCHIVE::CREATE) { if ($this->open($nom, ZIPARCHIVE::CREATE) !== TRUE) throw new Exception("L'archive ne peut être créée"); } else if($flag == ZIPARCHIVE::OVERWRITE) //si le flag nous indique que nous ecrasons l'archive { if(!file_exists($nom)) //elle n'existe pas, on la créer { if ($this->open($nom, ZIPARCHIVE::CREATE) !== TRUE) throw new Exception("L'archive ne peut être créée"); } else { if (!unlink($nom)) throw new Exception("L'archive ne peut être écrasé"); if ($this->open($nom, ZIPARCHIVE::CREATE) !== TRUE) throw new Exception("L'archive ne peut être créée"); } } if ($commentaire != "") $this->setArchiveComment($commentaire); } /** * Methode qui permet d'enregistrer une sous arborescence. * $chemin = chemin vers le dossier a sauvé * $prefixe = argument pour la récursivité */ public function addRecursive($chemin, $prefixe = '') { // Creation d'un chemin absolu et ajout du séparateur de fichier $chemin = realpath($chemin) . DIRECTORY_SEPARATOR; // Si le chemin ne mene sur rien if (!file_exists($chemin)) throw new Exception("Le chemin '$chemin' n'existe pas"); // si le chemin ne mene pas sur un dossier if (!is_dir($chemin)) throw new Exception("Le chemin '$chemin' existe mais n'est pas un répertoire"); // Si il est impossible d'ouvrir le fichier if (!($dh = opendir($chemin))) throw new Exception("Le répertoire '$chemin' n'est pas accessible"); // on parcour le dossier while (($fichier = readdir($dh)) !== FALSE) { // si le ce n'est pas le lien . ou .. if ($fichier != '.' && $fichier != '..') { // Si c'est un dossier if (is_dir($chemin . $fichier)) { // on creer un dossier vide $this->addEmptyDir($prefixe . $fichier); // on lance la récursivité $this->addRecursive($chemin . $fichier . DIRECTORY_SEPARATOR, $prefixe . $fichier . DIRECTORY_SEPARATOR); } else { // ici un fichier // on ajoute le fichier if (!$this->addFile($chemin . $fichier, $prefixe . $fichier)) throw new Exception("Le fichier '$chemin/$fichier' n'a pu être ajouté à l'archive"); } } } // on ferme le pointeur closedir($dh); } } ?>
mon code fonctionne bien, je peux bien sur télécharger l'archive, mais le problème est que l'archive est écrie dans le dossier du fichier qui appel ma class.
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 <?php include('ZipBackup.php'); //le nom de l'utilisateur a backup $user="racine"; //le chemin vers le dossier personnel de l'utilisateur $dossier="./".$user; $archive=$user."_".date('d-m-Y').".zip"; header('Content-Type: application/x-zip'); header("Content-Disposition: attachment; filename=".$archive); $zip=new ZipBackup($user."_".date('d-m-Y').".zip"); $zip->addRecursive($dossier); $zip->close(); readfile($archive); ?>
Malheureusement moi je ne voudrai pas que cette archive soit ecrie sur le disque. Je voudrai juste la telecharger et ne pas laissé de trace de cette archive sur le serveur.
Donc avez vous une idée de comment faire ceci ? ( soit ne pas ecrire l'archive sur le disque soit la supprimé après téléchargement )
Je vous remercie d'avance pour votre aide
EDIT: "Résolu", en faite je vais tout simplement ecrire dans un partition tmpfs
Partager