Zipper à la volée avec PHP (suite)
Résolu
heliconius
Messages postés
539
Date d'inscription
Statut
Membre
Dernière intervention
-
heliconius Messages postés 539 Date d'inscription Statut Membre Dernière intervention -
heliconius Messages postés 539 Date d'inscription Statut Membre Dernière intervention -
Bonsoir,
@Nhay vient de me fournir les indications pour créer un fichier ZIP structuré exactement comme je le souhaitais. J'ai testé avec le code suivant :
Ce code produit le fichier suivant :
C'est "pile-poil" ce que je voulais à une toute petite différence près. Dans le code ci-dessus, le fichier test.zip est physiquement créé dans le répertoire du script. Or pour ma part, je souhaitais non pas en faire un zip sur le disque mais un zip proposé au téléchargement comme dans l'envoi d'un fichier texte à télécharger tel que ci-dessous :
Comment pourrait-on faire ? Merci.
@Nhay vient de me fournir les indications pour créer un fichier ZIP structuré exactement comme je le souhaitais. J'ai testé avec le code suivant :
<html> <head> <title></title> </head> <body> <?php $zip = new ZipArchive; $res = $zip->open('test.zip', ZipArchive::CREATE); if ($res === TRUE) { $zip->addFromString('test1.txt', 'contenu du fichier ici'); $zip->addFromString('dir/test2.txt', 'contenu du fichier ici'); $zip->close(); echo 'ok'; } else { echo 'échec'; } ?> </body> </html>
Ce code produit le fichier suivant :
Archive: test.zip
Length Date Time Name
--------- ---------- ----- ----
22 2015-12-13 22:54 test1.txt
22 2015-12-13 22:54 dir/test2.txt
--------- -------
44 2 files
C'est "pile-poil" ce que je voulais à une toute petite différence près. Dans le code ci-dessus, le fichier test.zip est physiquement créé dans le répertoire du script. Or pour ma part, je souhaitais non pas en faire un zip sur le disque mais un zip proposé au téléchargement comme dans l'envoi d'un fichier texte à télécharger tel que ci-dessous :
header("Content-disposition: filename=test.zip"); header("Content-Type: application/force-download"); header("Content-type: application/octet-stream"); header("Pragma: no-cache"); header("Expires: 0"); // ... ici envoi du fichier zip ... die();
Comment pourrait-on faire ? Merci.
A voir également:
- Zipper à la volée avec PHP (suite)
- Easy php - Télécharger - Divers Web & Internet
- Comment zipper un pdf - Guide
- Expert php pinterest - Télécharger - Langages
- Retour à la ligne php ✓ - Forum PHP
- Comment localiser une ps5 volée - Forum PS5
2 réponses
(re)bonjour,
Du coup, un petit readfile sur le zip créer et le tour est joué !
Il sera peut-être nécessaire de mettre un header Content-length que tu peut remplir avec filesize
Si ensuite tu n'a pas besoin du zip sur ton serveur, supprime le avec unlink.
PS : Du coup,petit rappel, pas de code html avant des header
PS 2 : pour le nom de fichier sur le serveur, tu peut te servir de tempnam pour obtenir un nom temporaire et unique, ça évitera des soucis si deux personnes accède à ton script en même temps.
Du coup, un petit readfile sur le zip créer et le tour est joué !
Il sera peut-être nécessaire de mettre un header Content-length que tu peut remplir avec filesize
Si ensuite tu n'a pas besoin du zip sur ton serveur, supprime le avec unlink.
PS : Du coup,petit rappel, pas de code html avant des header
PS 2 : pour le nom de fichier sur le serveur, tu peut te servir de tempnam pour obtenir un nom temporaire et unique, ça évitera des soucis si deux personnes accède à ton script en même temps.
'lut, pour complémenter la réponse de Nhay:
ZipArchive ne peux pas marcher uniquement en mémoire, il a besoin d'un espace sur un système de fichier.
Écrire directement sur le disque tue la performance, mais si ton serveur où PHP tourne est sous Linux, arrange-toi pour écrire dans
ZipArchive ne peux pas marcher uniquement en mémoire, il a besoin d'un espace sur un système de fichier.
Écrire directement sur le disque tue la performance, mais si ton serveur où PHP tourne est sous Linux, arrange-toi pour écrire dans
/tmp,
/dev/shmou tout autre point de montage d'un
tmpfspour que les opérations soient réalisées en mémoire plutôt que physiquement.
Ok et merci @gravgun pour l'utilisation de /tmp ou autre tmpfs car mon serveur est effectivement sous GNU Debian/Linux.
En fait, ce besoin est lié à la création d'ebooks (au format epub) qui ne sont ni plus ni moins que des pages xhtml zippées dans une structure de répertoires avec extension epub. La finalité est donc : parcours d'une base de données, création des pages, zippage et envoi par téléchargement. Il me manquait les deux dernières étapes. Merci à vous deux. Question résolue. Encore merci.