Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
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
$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
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
Hors ligne
non justement tout petit zip donc écriture sur le disque inutile
A+JYT
Hors ligne
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)
Hors ligne
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
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
Hors ligne
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; }
A+JYT
Hors ligne