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

  FORUM HardWare.fr
  Programmation
  Perl

  GZIP: apache cgi-perl: "Content-Encoding: gzip" (encodé par le perl)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

GZIP: apache cgi-perl: "Content-Encoding: gzip" (encodé par le perl)

n°1945134
MisterBark
be aware
Posté le 26-11-2009 à 22:28:55  profilanswer
 

 Salut ;)
 
Ma question de base est simple :
Comment encoder en gzip une variable de données ? (et non un fichier)
 
Ce que je souhaite faire en réalité, c'est encoder mes données html à renvoyer au client, sous certaines conditions (d'ou la non utilisation de mod_gzip)
(Je pense par ex n'encoder que si ca n'est pas un robot, et que la page est plus grande que N octets... ou bien si son fai est lent... etc)
 
Alors je me suis penché sur IO::Compress::Gzip
Mais en étudiant la source de plus près, je me suis apercu que ca n'était fait que pour encoder depuis un fichier ? (leur code source va meme lire les infos du fichier...)
 
Donc ca ne semble pas être ce dont j'ai besoin.
Moi je voudrais juste quelque chose du genre: $gzip = encode_gzip($data)
qui ferait la meme chose que lorsqu'on utilise le STDIN du binaire gzip.
 
En encodant le code html complet, je pourrais ensuite renvoyer Content-Encoding: gzip

 
MERCI ! :D


---------------
La vie c'est comme une boite de chocolats, on ne sait jamais sur quoi on va tomber. (Forrest Gump)
mood
Publicité
Posté le 26-11-2009 à 22:28:55  profilanswer
 

n°1945172
gilou
Modérateur
Modzilla
Posté le 27-11-2009 à 03:45:47  profilanswer
 

IO::Compress::Gzip la doc sur CPAN est complexe mais claire, ce n'est pas fait que pour compresser un fichier:

Code :
  1. use IO::Compress::Gzip;
  2. ...............................
  3. my $compressed;
  4. my $zipper = IO::Compress::Gzip->new(\$compressed); # buffer destination a passer par référence
  5. $zipper->print($data); #$data contient les données à compresser
  6. $zipper->close();
  7. # a ce stade $compressed contient les données zippées


C'est un exemple minimal (mais testé et qui marche); si on veut donner un nom aux données dans l'archive, on fera
my $zipper = IO::Compress::Gzip->new(\$compressed, {Name => "test.txt"});
et en plus de name, on a tout un tas de paramétrages possible.
En mode append, on peut faire des $zipper->print($data); successifs avec data changé a chaque étape, etc
Bref, IO::Compress::Gzip permet un contrôle extrêmement fin de ce que l'on fait.

 

Le code complet qui m'a servi a tester:

Code :
  1. #!/usr/bin/perl -w
  2.  
  3. use strict;
  4. use warnings;
  5.  
  6. use IO::Compress::Gzip;
  7. my $data = "hello World!";
  8.  
  9. my $compressed;
  10. my $z = IO::Compress::Gzip->new(\$compressed, {Name => "test.txt"});
  11. $z->print($data);
  12. $z->close();
  13. #le reste est un test pour vérification avec winzip
  14. my $out;
  15. open ($out, '>', "test.gz" );
  16. binmode $out;
  17. print $out $compressed;
  18. close $out;


A+,


Message édité par gilou le 27-11-2009 à 03:51:17

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°1945173
MisterBark
be aware
Posté le 27-11-2009 à 03:59:35  profilanswer
 

oulala !
je crois bien que je t'aime ! :D
 
C'est magique ! merci beaucoup !
 
En fait je crois que je connais très mal le format gzip... car j'avais meme pas pensé qu'on pouvait donner des paramètres pour l'arborescence de sortie... je me contentais de croire que gzip n'était qu'une compression brute de données, or y'a forcément aussi une gestion d'arborescence à l'interieur meme du format... comme pour un tar quoi...
Cela dit, dans mon cas ca doit rester une compression pure sans arbo.
 
Bon, je vais faire quelques tests dans le cgi pour voir si les navigateurs aiment cette méthode...
 
PS: j'ai l'impression que si n'étais pas la l'activité du forum chuterait de 50% :)


---------------
La vie c'est comme une boite de chocolats, on ne sait jamais sur quoi on va tomber. (Forrest Gump)
n°1945174
MisterBark
be aware
Posté le 27-11-2009 à 04:41:31  profilanswer
 

Bon c'est génial ! ca marche impeccable !
 
J'ai mis comme conditions:
- pas robot (non seulement ils ont le débit qu'il faut, mais ca évite d'éventuels problemes s'ils n'aiment pas, gèrent mal, ou qu'une erreur survient)
- page > 10Ko
- pas de surcharge du cpu (en vérifiant simplement l'existence d'un fichier "nogzip" en tmpfs, qui existera donc en cas de surcharge)
 
Ca divise la taille par 5 en moyenne.
 
Bon le seul truc c'est que je ne renvois pas de Content-Length, c'est pas grave ?
je n'en ai jamais renvoyé et ca a toujours semblé marcher, y'a pas de raison que ca change avec le gzip ?


Message édité par MisterBark le 27-11-2009 à 04:46:53

---------------
La vie c'est comme une boite de chocolats, on ne sait jamais sur quoi on va tomber. (Forrest Gump)
n°1945222
gilou
Modérateur
Modzilla
Posté le 27-11-2009 à 10:00:55  profilanswer
 

:)
Content-Length, tu l'as en faisant length($compressed) à priori.
A+,


Message édité par gilou le 27-11-2009 à 10:55:37

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°1945380
MisterBark
be aware
Posté le 27-11-2009 à 16:04:22  profilanswer
 

oui c'est sur, mais je me demande juste si c'est vraiment utile... parce qu'en principe ca "reste vivant" lol (keep alive)


---------------
La vie c'est comme une boite de chocolats, on ne sait jamais sur quoi on va tomber. (Forrest Gump)

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

  GZIP: apache cgi-perl: "Content-Encoding: gzip" (encodé par le perl)

 

Sujets relatifs
Perl [Modification d'un programme existant] Probleme avec IfPerl - fonctions simples
Probleme de config Apache avec FirebirdSuppression d'ancien fichier en PERL
[PERL] aide script pour alimenter SGBD MySQLManipulation basique de fichier texte a l'aide de Perl
Plantage sur serveur Unix/Apache avec IE6Redirection de URI d'un répertoire vers VHost Apache
comment générer des tableaux en perlUpload AJAX + JSP avec iframe et apache.commons.fileupload
Plus de sujets relatifs à : GZIP: apache cgi-perl: "Content-Encoding: gzip" (encodé par le perl)


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