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 19/06/2011, 00h18   #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 [Prob] Création d'archive zip

Bonjour a tous,
je cherche a faire une archive (zip) d'une arborescence.

Pour ce faire j'utilise la class suivante:
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
99
100
 
<?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)) {
				//	echo "Ajout du dossier: ".$chemin.$prefixe . $fichier."<br/>";
 
					// 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
					//echo "Ajout du fichier: ".$chemin. $fichier."<br/>";
 
					// 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 je l'utilise ainsi:
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="test";
 
//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);
 
 
?>
Le problème est que ceci me fabrique une archive corrompu.
Voici une image qui illustre le problème:



Donc avez vous une idée de pourquoi j'ai ce problème ?
J'ai oublié quelque chose ?

Merci d'avance pour votre aide
hannibal.76 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2011, 00h50   #2
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 456
Points : 8 456
utilise RecursiveDirectoryIterator ça sera plus simple
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2011, 11h19   #3
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
Merci, mais la problème ne vient pas de la je pense.
Tout simplement car lorsque je dé-commente les echo dans ma méthode récursive, j'obtiens bien un affichage correct des fichiers/dossiers qui doivent être stocké.

EDIT: résolu, je n'avais pas virée mais echo dans mon code et cela posait probleme ....
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 01h25.


 
 
 
 
Partenaires

Hébergement Web