Visualizzazione dei risultati da 1 a 10 su 10

Discussione: Download file

  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2004
    Messaggi
    107

    Download file

    Ciao a tutti!! Premetto che già altre volte ho fatto pagine php che permettessero di scaricare un file. Il file in questione è un'immagine jpeg. Allora questo è il codice:
    codice:
        header("Content-Type: image/jpeg");
        header("Content-Description: File Transfer");
        header("Content-Disposition: attachment; filename=".basename($foto_selezionata));
        header("Content-Transfer-Encoding: binary");
        header("Content-Length: ".filesize($foto_selezionata));
        @readfile($foto_selezionata);
    Notate qualcosa che non va?!? Il file lo scarica, però quando provo a vederlo dice "File danneggiato"

    Cosa ho sbagliato? Mi ha sempre funzionato!!
    Giovanni

  2. #2
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    io in genere uso questi e non ho mai avuto problemi:

    codice:
          header("Expires: Mon, 12 Jul 1976 06:20:00 GMT");
          header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
    
          header("Cache-Control: no-store, no-cache, must-revalidate");
          header("Cache-Control: post-check=0, pre-check=0", false);
    
          header("Pragma: no-cache");
    
          header('Content-type: application/octet-stream');
          header('Content-Disposition: attachment; filename="'.basename($nomefile).'"');
          readfile($nomefile);

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2004
    Messaggi
    107
    Continua a non funzionare, mi dice file danneggiato... allora dev'esserci qualcos'altro che non va! Facciamo cosi guardiamo la situazione più in largo. Allora io ho una pagina dove mostro un'immagine e sotto c'è una select. Tu selezioni il formato della foto dalla select e parte il download. La select è in un form che punta alla stessa pagina. La pagina php inizia così:
    Codice PHP:
    /* PROVENGO DAL FORM DI DOWNLOAD DELLA FOTO */
    if(isset($_POST['photo_size'])){
      switch(
    $_POST['photo_size']){
        case 
    'big'$foto_selezionata $nome_foto; break;
        case 
    'medium'$foto_selezionata $nome_prev; break;
        case 
    'small'$foto_selezionata $nome_thumb; break;
      }
      
    header("Expires: Mon, 12 Jul 1976 06:20:00 GMT");
      
    header("Last-Modified: " gmdate("D, d M Y H:i:s") . " GMT");

      
    header("Cache-Control: no-store, no-cache, must-revalidate");
      
    header("Cache-Control: post-check=0, pre-check=0"false);

      
    header("Pragma: no-cache");

      
    header('Content-type: application/octet-stream');
      
    header('Content-Disposition: attachment; filename="'.basename($foto_selezionata).'"');
      
    readfile($foto_selezionata);

    il codice del form invece è questo:
    Codice PHP:
    echo "Scarica foto: \n";
    echo 
    "<form action=\"".currentPageURL()."\" method=\"post\" id=\"download_photo\" style=\"display:inline\">\n";
    echo 
    "<select name=\"photo_size\" onchange=\"invia_form('download_photo')\">\n";
    echo 
    "<option value=\"seleziona\" selected=\"selected\">-Formato-</option>\n";
    list(
    $width$height$type$attr) = getimagesize($nome_foto);
    echo 
    "<option value=\"big\">$width x $height</option>\n";
    if (
    $photo->preview!=$photo->nome){ // c'è anche una versione "medium" della foto oltre la versione normale e thumbnail
        
    list($prev_width$prev_height$prev_type$prev_attr) = getimagesize($nome_prev);
        echo 
    "<option value=\"medium\">$prev_width x $prev_height</option>\n";
    }
    list(
    $thumb_width$thumb_height$thumb_type$thumb_attr) = getimagesize($nome_thumb);
    if(
    $thumb_width<$width and $thumb_height<$height){
        echo 
    "<option value=\"small\">$thumb_width x $thumb_height</option>\n";
    }
    echo 
    "</select>\n";
    echo 
    "</form>\n"
    la funzione invia_form è una funzione di javascript che non fa altro che fare il submit del form partendo dall'id dello stesso
    Giovanni

  4. #4
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    Una cosa che controllerei subito innanzitutto è se il file è delle dimensioni che ti aspetti, oppure per essere ancora più sicuro controllare che $foto_selezionata contenga il giusto percorso al file (magari è cambiato qualcosa nella tua applicazione?)

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2004
    Messaggi
    107
    no no il percorso è giusto perchè è la stessa che visualizzo subito prima della select che mi permette di scaricarla
    Giovanni

  6. #6
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    Hai magari qualcosa che "sporca" la pagina? tipo dell'altro output dopo readfile, credo che possa bastare anche un ritorno a capo dopo la chiusura del php per creare danni...

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2004
    Messaggi
    107
    beh si... ma un die() non dovrebbe bastare?
    Giovanni

  8. #8
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    si, era un'ipotesi

    Ti propongo una prova un po' assurda...

    Prova a commentare tutte le parti relative all'header, e lancia solo il readfile, dovresti vedere il codice dell'immagine, teoricamente copiando e incollando il codice sul notepad e salvando con estensione jpeg dovresti avere l'immagine.

    Se ti da ancora errore c'è qualche echo o qualcosa che interferisce, altrimenti è un problema relativo agli header della pagina, anche se mi sembra strano, visto che il mio codice sono sicuro che funzioni, e tu stesso dici che il tuo funzionava.

  9. #9
    Utente di HTML.it
    Registrato dal
    Nov 2004
    Messaggi
    107
    mi dà ancora lo stesso errore... file danneggiato...
    Giovanni

  10. #10
    Utente di HTML.it
    Registrato dal
    Nov 2004
    Messaggi
    107
    Per favore! Qualcuno ha una risposta? Basta anche postare il codice che usate solitamente per fare il download dei file! Grazie mille!
    Giovanni

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.