+ Rispondi alla Discussione
Risultati da 1 a 7 di 7

[PHP]Force download - download forzato

Ultimo Messaggio di ilnetsurfer il:
  1. #1
    Anu è offline
    User L'avatar di Anu
    Data Registrazione
    Nov 2012
    Località
    Padova
    Messaggi
    92

    [PHP]Force download - download forzato

    Salve a tutti,
    avrei bisogno di forzare il download dei miei pdf:
    Ho trovato varie guide online, che funzionano perfettamente se la cartella del download si trova nello stesso ftp, tuttavia avrei bisogno di scaricare un file che si trova
    su un altro server.
    Vi posto il codice:


    Codice:
    <?php    
    /*   
    impostiamo la cartella in cui sono presenti i file per il download   
    */ 
       
    //$dir = "download/";    
    $dir = "link al sito esterno";    
        
    /*   
    riceviamo via GET il file da scaricare  
    la funzione basename la applichiamo al fine di evitare che   
    utenti maliziosi possano eseguire percorsi nell'URL  
     */    
    $file = isset($_GET['file']) ? basename( (string) $_GET['file'] ) : '';    
        
    $path = $dir . $file;    
      
    /* eseguiamo alcuni controlli preventivi */    
    if($file==''){  
        exit('Nessun file indicato');  
        }  
    else if(!is_file($path)){    
        exit('Il file non esiste');    
        }    
    else if(!is_readable($path)){    
        exit('Il file non ha i permessi per essere scaricato');    
        }    
          
    /* otteniamo alcune info sul file */    
    $info = pathinfo( $path );    
    $extension = $info['extension']; // estensione    
    $size = filesize($path); // dimensione in byte    
    $time_file = date( 'r', filemtime( $path ) ); // time ultima modifica    
       
    /* inviamo gli opportuni headers */    
    /* alcuni di questi sono degli hack (trucchi)   
    per farlo funzionare correttamente anche su alcune versioni di IE*/    
    header('Content-Type: application/octet-stream');    
    header('Content-Disposition: attachment; filename="'. basename($path) .'"');     
    header('Content-Transfer-Encoding: binary');    
    header('Content-Length: ' . $size);    
    header('Last-Modified: ' . $time_file);    
    header('Expires: 0');    
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');    
    header('Pragma: public');    
          
    /* eliminiamo eventuale output inviato */    
    ob_clean();    
    flush();    
        
    /* leggiamo il file inviamo l'output */    
    @readfile($path) or die('SERVER ERROR!');    
    exit;    
    ?>
    ed infine l'html:

    Codice:
    <a href="download.php?file=file.pdf" target="_blank">SCARICA IL FILE</a>
    Mi dice sempre che il file non esiste.

    Consigli?

  2. #2
    Anu
    Anu è offline
    User L'avatar di Anu
    Data Registrazione
    Nov 2012
    Località
    Padova
    Messaggi
    92
    Ho trovato la soluzione:
    non serve nemmeno il php, basta semplicemente utilizzare un attribute di HTML5, il tag download.

    <a href="indirizzodeldownload/anu.pdf" download="nome_che_preferisco.pdf">Scarica il Pdf!</a>

    Spero di essere stato utile

  3. #3
    User L'avatar di MatrixTeo
    Data Registrazione
    May 2009
    Messaggi
    66
    Grazie, non lo conoscevo quell'attributo, ma è cross-browser? Mi sembra che la soluzione in PHP sia ancora la più affidabile.

  4. #4
    Anu
    Anu è offline
    User L'avatar di Anu
    Data Registrazione
    Nov 2012
    Località
    Padova
    Messaggi
    92
    Argh!! Dannazione, ho commesso un errore base.. non ho controllato

    Attualmente funziona solo su chrome!!!

    Ho trovato un'altra opzione che devo testare (vediamo se nel pomeriggio riesco..):


    1. <?php
      header('Content-disposition: attachment; filename=huge_document.pdf');
      header('Content-type: application/pdf');
      readfile('huge_document.pdf');
      ?>

      <a href="huge_document.php">Download my huge document (PDF)</a>

  5. #5
    User L'avatar di MatrixTeo
    Data Registrazione
    May 2009
    Messaggi
    66
    il tuo primo esempio mi sembrava buono, forse dovresti controllare il percorso del file che dichiari negli header, secondo me è un problema di directory. La logica dello script mi sembra valida.

  6. #6
    Anu
    Anu è offline
    User L'avatar di Anu
    Data Registrazione
    Nov 2012
    Località
    Padova
    Messaggi
    92
    Si infatti.. funzionando con i files nella stessa directory non dovrebbero esserci problemi con i file all'esterno.

  7. #7
    Moderatore L'avatar di ilnetsurfer
    Data Registrazione
    Jun 2007
    Località
    Napoli
    Messaggi
    552
    puoi usare file_get_contents una sola volta per ogni link in modo da conservare in automatico una copia del file sul server (file_get_contents e poi fwrite per salvare il file), poi magari con unlink puoi rimuovere i file in modo da liberare memoria!
    He knows not where he's going.For the ocean will decide.It's not the DESTINATION...It's the glory of the RIDE.

+ Rispondi alla Discussione

^ Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •  
  • Il codice BB è Attivato
  • Le faccine sono Attivato
  • Il codice [IMG] è Attivato
  • Il codice [VIDEO] è Attivato
  • Il codice HTML è Disattivato
  • Trackbacks Attivato
  • Pingback Attivato
  • Refback Attivato

SEO by vBSEO 3.6.0 PL2 ©2011, Crawlability, Inc.