Jump to content

Générer un Zip à la volée?


Recommended Posts

Bonjour,

Existe-t-il un moyen, en php, de générer un fichier zip (composé de X fichiers PDF) sans le créer physiquement sur le serveur?

Merci

Portekoi

Link to post
Share on other sites

Si ton serveur est sous Linux, zip permet de rediriger la "sortie standard" (stdout), si on donne le nom "-" au fichier de sortie, donc aussi vers un pipe qui enverra cela vers le navigateur.

Par exemple :

zip -r - . | dd of=/dev/nrst0 obs=16k

compresse récursivement le répertoire courant, et l'envoie au programme dd qui l'enverra à son tour sur une bande magnétique.

Link to post
Share on other sites

En faites, je dois le générer à la demande lorsque, par exemple, une vente c'est bien passée.

Et je veux éviter d'avoir à l'écrire sur le serveur.... En gros, pouvoir le générer et le balancer avec un header de type "zip" mais je ne sais pas si cela est possible.

Link to post
Share on other sites

Ca devrait être trivial avec une classe php telle que http://solomongaby.users.phpclasses.org/package/2322-PHP-Create-ZIP-file-archives-and-serve-for-download.html

Dans le descriptif, ils mettent ceci :

The class can generate the packed archive as a string value.

et cette chaîne de caractères peut s'envoyer vers le navigateur...

Link to post
Share on other sites

A priori, ca ne pose pas vraiement de problème d'écrire le fichier sur le disque.

Tu peux l'écrire dans le dossier /tmp (si tu es sur un linux).

Ou au pire, le créé, l'envoyer au client et le supprimer.

Cette soluce permet notament d'utiliser des scripts en ligne de commandes (zip, gz, tar...) qui sont plus intéressantes à mon avis, surtout pour compresser un dossier, que les extensions PHP.

Il existe aussi des outils pour fusionner les PDF en 1 seul fichier.

Le script PHP reste très simple

1. lancer la création du zip
2. envoyer au client (readfile par exemple)
3. supprimer le fichier du serveur (unlink)

En terme de performances, on reste très efficace ... je ne suis pas sur qu'on voit vraiement la différence avec un process hors disque qui forcément va consommer beaucoup plus de mémoire.

Edited by MangaII
Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...