Sto impazzendo su un CGI, il primo che faccio quindi sicuramente l'errore è mio, solo che non riesco a capirne il motivo. Qualcuno sa darmi una mano?
Per ora mi focalizzo su un determinato tipo di file, il codice originale però contiene altri controlli sull'estensione.codice:#!c:/perl/bin/perl use CGI ':all'; use strict; # Ormai oggi è quasi obbligatorio. my $dir = "c:/progetti/N-ext_new_php/"; # directory che contiene i file da scaricare my $q = new CGI; sub send_file { my($FH)=@_; open(FH, "$FH") || exit; binmode STDOUT; binmode FH; print <FH>; close FH; exit; } if(!param) { print header(-type => 'text/plain'); print "Questa pagina risponde a interrogazioni di un sistema privato.\nQualsiasi utilizzo diverso e' vietato.\nOgni transazione e' registrata!\n"; exit; } my $filename = $q->param('Name'); # raccoglie il nome file if ( $filename =~ /.*\.\./ ) { die(); } my $ext = substr($filename, -3); if ($ext == "pdf") { print $filename; print header(-type => 'application/pdf',-attachment => ${filename}); } send_file($filename); exit;
Alcuni pezzi mi sono stati dati da un altro lavoro (vedi la send_file) e li ho copiati uguali.
Non capisco dove sta l'errore. Eseguendo il file da linea di comando con
e cercando di stampare sia $ext che $filename, viene stampato tutto corretto.codice:getfile.cgi Name=pippo.pdf
Nel file php che lo richiama, inserisco semplicemente il richiamo al cgi con
L'acroread parte ma poi non si visualizza nulla.codice:getgile.cgi?Name=dir/nome.est
Non riesco a capire dove sbaglio...
Seconda domanda, come si fa a stampare ad una pagina tipo quella sopra qualcosa nel browser? Con print non mi fa vedere niente.
Sono sotto Win XP con Apache 2.0.53, PHP 5.0.4 e ActivePerl.
Grazie dell'eventuale aiuto.
EDIT: eseguendolo da linea di comando e redirigendo l'output in un file pdf, mi genera un file pdf perfettamente visibile. Allora perchè non funziona con Firefox e IE?

Rispondi quotando