Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/06/2011, 19h04   #1
Membre habitué
 
Homme David
Étudiant
Inscription : avril 2009
Messages : 284
Détails du profil
Informations personnelles :
Nom : Homme David
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2009
Messages : 284
Points : 134
Points : 134
Par défaut [QST] Création d'archive sans ecrire sur le disque

Bonjour a tous,

j'utilise la class ZipArchive pour générer une archive d'une arborescence.

Voici ma class:
Code :
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);
    }
}
 
?>
Et voici mon fichier qui utilise la class:
Code :
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);
 
 
?>
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.

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
hannibal.76 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h36.


 
 
 
 
Partenaires

Hébergement Web