Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2004
    Messaggi
    27

    CGI per download file: perchè non va?

    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?

    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;
    Per ora mi focalizzo su un determinato tipo di file, il codice originale però contiene altri controlli sull'estensione.
    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
    codice:
    getfile.cgi Name=pippo.pdf
    e cercando di stampare sia $ext che $filename, viene stampato tutto corretto.
    Nel file php che lo richiama, inserisco semplicemente il richiamo al cgi con
    codice:
    getgile.cgi?Name=dir/nome.est
    L'acroread parte ma poi non si visualizza nulla.
    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?

  2. #2
    Direi che si mi dai l'indirizzo della pagina dove l'hai messo possiamo connetterci con telnet e controllare meglio il contenuto degli header.

    CMQ, ora che controllo, vedo sta cosa strana:

    codice:
    if ($ext == "pdf") {
      print $filename;
      print header(-type => 'application/pdf',-attachment => ${filename});
    }
    Le stringhe si comparano con questi operatori:
    STR1 eq STR2 #Se le stringhe sono uguali (sta per equal)
    STR1 ne STR2 #Se sono differenti (sta per not equal)
    # non ricordo le altre

    quindi
    if ($ext eq "pdf") {
    print $filename;
    print header(-type => 'application/pdf',-attachment => ${filename});
    }
    Poi non capisco perchè spedisci $filename prima degli header, probabilmente hai ragione te, però ora non me lo spiego.

    Poi, se il file non è un PDF, te non dici al browser il mime-types.
    Io ti consiglio a questo proposito la libreria MIME::types o MIME::type che te gli passi il nome del file e lui ti ritorna il relativo MIME_type.

    Non so se ti sono stato di aiuto.
    Spero poerò che riuscirai a risolvere il problema. Posta i risultati.
    ...

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2004
    Messaggi
    27
    Hai ragione sul confronto delle stringhe era un altro problema che avevo e stavo cercando di risolvere.
    Sul fatto che spedisco prima $filename dell'header era un rimasuglio di una prova che avevo fatto.
    Riguardo ai mime types in casi diversi da pdf, per ora stavo provando con un pdf, nel file originario sono presenti altri casi in cui guardo un pò tutte le estensioni possibili con cui devo lavorare.
    La pagina è in sviluppo sul mio pc, per ora non è disponibile in rete da nessuna parte.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.