Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 03-02-2010 17:39:45

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

[Résolu]Archives ZIP ??

Bonjour à tous

ça faisait longtemps que j'avais pas posé de question alors me revoilà
Bon ça risque d'être évident pour certain mais j'i pas trouvé alors ....

Est-il possible comme en C de créer un archive ZIP en mémoire de la remplir et de l'envoyer le tout sans poser de fichier temporaire sur le disque du serveur ?
un truc du genre

Code:

$zip = new ZipArchive();
$zip->addFromString  ('/chemin/vers/index.txt', $indexContent);
$zip->addFromString  ('/chemin/vers/tuto.txt', $tutoContent);
$zip->close();
$this->getResponse()->setHeader("Cache-Control","no-cache, must-revalidate");
$this->getResponse()->setHeader("Content-Type", "application/zip");
$this->getResponse()->setHeader("Content-Disposition", 'attachment; filename="test.zip"');
$this->getResponse()->setBody($zip);

c'est pas la peine d'essayer ça ça marche pas
mais c'est dans l'esprit

A+JYT

Dernière modification par sekaijin (12-04-2010 12:12:34)

Hors ligne

 

#2 03-02-2010 18:35:27

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: [Résolu]Archives ZIP ??

J'imagine que c'est pour ne pas utiliser trop de mémoire dans ton process...
Je vais un peu répondre à coté, mais je pense que tu ne perds rien à passer par un fichier temporaire que tu effaces ensuite.
Comme zip est un format compressé, je ne pense pas qu'une librairie puisse générer un zip "en streaming" (c'est pas adapté, mais je pense que tu vois l'idée)...

Par contre si ton zip est énorme, tu peux l'envoyer par morceaux à l'internaute pour que ton process ne prenne pas la taille du zip.

A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#3 03-02-2010 18:37:02

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: [Résolu]Archives ZIP ??

non justement tout petit zip donc écriture sur le disque inutile

A+JYT

Hors ligne

 

#4 03-02-2010 18:41:29

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: [Résolu]Archives ZIP ??

J'ai trouvé ça :
http://deinococcus.fr/?p=603

A+, Philippe
Edit : tu as pas mal de réponses en tapant "zip à la volée" dans google

Dernière modification par philippe (03-02-2010 18:44:55)


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#5 03-02-2010 21:09:03

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: [Résolu]Archives ZIP ??

merci je vais regarder ça de plus près.

A+JYT
PS: une bizarrerie de php la function tempnam permet de créer un fichier temporaire
elle prends comme paramètre obligatoire un nom du dossier dans le quel le créer

ce qui est bizarre dans cette affaire c'est que le paramètre est obligatoire mais que si on mets un répertoire qui n'existe pas alors le fichier est crée dans le dossier TEMP du système. pourquoi avec un tel mécanisme ne pas avoir rendu ce paramètre optionnel ?

Hors ligne

 

#6 04-02-2010 09:06:39

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: [Résolu]Archives ZIP ??

J'imagine que c'est pour être cohérent avec la fonction C tempnam() (de stdio) qui prend les 2 arguments de façon obligatoire.
Mais effectivement en PHP, ça ne semble pas naturel...
A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#7 12-04-2010 12:10:37

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: [Résolu]Archives ZIP ??

Code:

if ($this->zip) {
    $tmpfname = tempnam('xx', 'zip');
    $zip = new ZipArchive();
    $res = $zip->open($tmpfname, ZipArchive::CREATE);
    if ($res !== TRUE) {
        exit();
    }
}


foreach ($this->flow->ears as $name=>$ear) {
    if ($this->zip) {
        ob_start();
    }

    //Génération du contenu du fichier de conf
    ...
    
    if ($this->zip) {
        $out = ob_get_clean();
        $zip->addFromString(strtolower($ear->cmp_name) . '.cfg', $out);
    }
}

if ($this->zip) {
    $zip->close();
    $contents = file_get_contents($tmpfname);
    unlink($tmpfname);
    echo $contents;
}

wink
A+JYT

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages