Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1338 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  CGI Perl : créer une archive .tar.gz d'un dossier

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

CGI Perl : créer une archive .tar.gz d'un dossier

n°1901213
ccp6128
Syntax error
Posté le 01-07-2009 à 16:55:58  profilanswer
 

Hello aux habitués de la section.
 
Je cherche à créer un CGI qui permette de générer et de télécharger une archive contenant le contenu d'un répertoire, de préférence au format .tar.gz
 
Ce que je peux déjà faire :
 
Créer l'archive en question via le module Archive::Tar, placer le fichier à un endroit quelconque, puis faire un print de son contenu précédé des headers kivonbien pour forcer le téléchargement, puis effacer le fichier. Cette méthode marche, mais à l'inconvénient de laisser la page "tourner dans le vide" le temps de la création de l'archive (sans compter que parmi les utilisateurs il y aura probablement des bourrins du F5, ce qui pourrait conduire à la création de tonnes de fichiers temporaires).
 
 
 
Ce que je voudrais faire :
 
Créer l'archive "à la volée" sans création de fichier temporaire, et balancer le tout au navigateur. De préférence en même temps que l'archive se crée.
 
 
Est-ce possible, et si comment ?

mood
Publicité
Posté le 01-07-2009 à 16:55:58  profilanswer
 

n°1901226
tpierron
Posté le 01-07-2009 à 17:07:34  profilanswer
 

Bah, perso, j'utiliserai la ligne de commande pour lancer "tar" pour compresser et générer l'archive en même temps. Cette commande doit pouvoir sortir le résultat directement sur la sortie standard. Balance les headers HTTP juste avant et voilà, plus de fichier temporaire.
 
Cela dit, cette méthode à une faille : il ne pourra pas y avoir de Content-Length (forcément). Du coup pas de progress bar dans le navigateur.

n°1901230
ccp6128
Syntax error
Posté le 01-07-2009 à 17:16:29  profilanswer
 

Quelle serait la façon la plus "propre" de le faire ?
 
Balancer mes headers puis lancer le tar via un exec() pour pouvoir récupérer le contenu à la volée via la sortie standart ? Balancer la sortie du tar dans un pipe que je lirais ?

n°1901238
tpierron
Posté le 01-07-2009 à 17:32:15  profilanswer
 

Hmm, si tu lances tar avec une commande du genre "tar -zcf - dossier", la commande va tout te mettre sur la sortie standard, pas besoin de redirection, ni de pipe (si tu es dans un CGI).

n°1902054
ccp6128
Syntax error
Posté le 03-07-2009 à 15:21:15  profilanswer
 

Merci, ca marche parfaitement.
 

Code :
  1. #!/usr/bin/perl
  2. use strict;
  3. use CGI;
  4. use Sys::Hostname;
  5. my $host = hostname;
  6. print "Content-Type:application/x-download\n"; 
  7. print "Content-Disposition:attachment;filename=etc-$host.tar.gz\n\n";
  8. system('tar -cz /etc');

n°1902328
gilou
Modérateur
Modzilla
Posté le 04-07-2009 à 22:44:43  profilanswer
 

Et sinon, il y a le module Archive::Tar
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°1902339
ccp6128
Syntax error
Posté le 04-07-2009 à 23:42:20  profilanswer
 

Tout à fait, je m'en servais pour la première version de mon script.
 
Le souci concernait le fait que je n'ai pas su m'en servir sans créer de fichier temporaire, ce que je voulais éviter. Et le téléchargement aurait été "en attente" le temps que l'archive aie été créée dans son intégralité.
 
Je regarderai si c'est possible, je n'ai peut être pas bien compris la documentation de ce module.

n°1902347
gilou
Modérateur
Modzilla
Posté le 05-07-2009 à 04:16:16  profilanswer
 

La méthode donnée en fin de module m'a paru assez exploitable
 

Citation :

Similarly, if the compress program is available, you can use this to write a .tar.Z file


Code :
  1. use Archive::Tar;
  2. use IO::File;
  3.  
  4. my $fh = new IO::File "| compress -c >$filename";
  5. my $tar = Archive::Tar->new();
  6.    ...
  7. $tar->write($fh);
  8. $fh->close ;


 
A+,


Message édité par gilou le 05-07-2009 à 04:17:29

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  CGI Perl : créer une archive .tar.gz d'un dossier

 

Sujets relatifs
Créer une ListBox (débutant)Récupérer les propriétés d'un dossier
Comment supprimer un dossier en C++Faire une copie d'une archive Usenet (NNTP) en PHP
[VBA] liste deroulante dans ComboBox : comment creer liste ??Surveillance de Dossier
Creer un fichier à partir de php[PERL] Problème d'espace avec glob()
Créer calculs à trou donnant résultat[HTML] creer un message d'erreur
Plus de sujets relatifs à : CGI Perl : créer une archive .tar.gz d'un dossier


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR