J'essaie de mettre en œuvre un indicateur de progression pour les téléchargements de fichiers. Les parties 1 et 2 du script s'exécutent correctement si elles sont exécutées séparément. Mais s'il est exécuté ensemble, le script s'arrête à:Pourquoi mon script Perl s'arrête-t-il si le module CGI est utilisé après la lecture de stdin sur Windows?
my $cg = new CGI();
Le problème se produit uniquement sur un serveur Windows. Quelle pourrait être la raison?
#!C:\Perl\bin\perl.exe -w use CGI; $post_data_filename = "C:\\test\\postdata.txt"; $uploaded_filename = "C:\\test\\uploaded_file.txt"; #PART 1 # read and store the raw post data in a temporary file so that we can repeatedly # look at size of this temporary file in order to implement a progress bar open(TMP,">","$post_data_filename"); $len = $ENV{'CONTENT_LENGTH'}; read (STDIN ,$LINE, $len); print TMP $LINE; close (TMP); #PART 2 #use a CGI instance to read the raw post data and extract the uploaded file from it my $cg = new CGI(); open(STDIN,"$post_data_filename"); my $fh = $cg->upload('file[0]'); open($tmp_fh, ">$uploaded_filename"); while(<$fh>) { print $tmp_fh $_; } close($tmp_fh); print "Content-type: text/html\n\n"; print "Ready\n"; exit;
Veuillez utiliser 'strict'. Évitez la notation d'objet indirect: my $ cgi = CGI-> new est préférable. Je ne suis pas sûr de ce que vous faites ici: tout ce code est-il dans le même fichier? Votre script a-t-il la permission d'écrire dans 'C: \ test'? –