Probleme a l'usage de vars de CGI
Bonjour
Je vous mets un extrait de mon code qui me permet de recuperer un upload de fichier juste avant de le reexpedier :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
|
use CGI;
use Fcntl qw(:DEFAULT :flock);
use File::Temp qw/ tempfile tempdir /;
open(TMP,">","$post_data_file") or &bye_bye ("Can't open temp file");
my $i=0;
$ofh = select(TMP); $| = 1; select ($ofh);
while (read (STDIN ,$LINE, 4096) && $bRead < $len )
{
$bRead += length $LINE;
select(undef, undef, undef,0.35); # sleep for 0.35 of a second.
$i++;
print TMP $LINE;
}
close (TMP);
open(STDIN,"$post_data_file") or &bye_bye("Can't open temp file");
my $cg = new CGI();
my $qstring="";
my %vars = $cg->Vars;
my $j=0;
while(($key,$value) = each %vars)
{
if(defined $value && $value ne '')
{
my $fh = $cg->upload($key);
if(defined $fh)
{
#carp $fh;
($tmp_fh, $tmp_filename) = tempfile(DIR => $tmp_dir);
while(<$fh>) {
print $tmp_fh $_;
}
close($tmp_fh);
$fsize =(-s $fh);
$fh =~ s/([^a-zA-Z0-9_\-.])/uc sprintf("%%%02x",ord($1))/eg;
$tmp_filename =~ s/([^a-zA-Z0-9_\-.])/uc sprintf("%%%02x",ord($1))/eg;
$qstring .= "file[name][$j]=$fh&file[size][$j]=$fsize&";
$qstring .= "file[tmp_name][$j]=$tmp_filename&";
$j++;
}
else
{
$value =~ s/([^a-zA-Z0-9_\-.])/uc sprintf("%%%02x",ord($1))/eg;
$qstring .= "$key=$value&" ;
}
}
} |
Mon probleme se trouve a la reexpedition, en effet %vars est vide et dans le log d'erreurs apache j'ai :
Premature end of script headers: /cgi-bin/upload.cgi
CGI.pm: Server closed socket during multipart read (client aborted?).
Etant debutant en perl j'ai repris ce code deja existant pour l'adapter mais je ne sais pas si il est correct.
Voila le contenu du fichier $post_data_file recu :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
-----------------------------5542324156557
Content-Disposition: form-data; name="hidden"
test
-----------------------------5542324156557
Content-Disposition: form-data; name="file_1"; filename=""
Content-Type: application/octet-stream
-----------------------------5542324156557
Content-Disposition: form-data; name="file_2"; filename="Music.txt"
Content-Type: text/plain
Disco /Funk
YMCA
Patrick Hernandez
Rock
Liquido
Nirvana
ACDC
Green Day
Noir Desir
Lenny Kravitz
RnR
Chuck Berry
Dany Brillant - St Germain
-----------------------------5542324156557-- |
Merci de votre aide