Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Errore in script per forzare il download di un'immagine



    In una cartella "force-download" nella root principale del sito, ho tre file
    1. force-download.php
    2. img.jpg
    3. index.php

    i codici sono:
    force-download.php
    Codice PHP:
    <!doctype html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>force download</title>
    </head>
    <body>
    <?php
    // definisco una variabile con il percorso alla cartella
    // in cui sono archiviati i file
    $dir "/root/force-download/";
    // Recupero il nome del file dalla querystring
    // e lo accodo al percorso della cartella del download
    $fn = (isset($_GET['filename']) ? $_GET['filename'] : false);
    // controllo la sintassi del file richiesto
    if (!preg_match('/^[a-z0-9]+\.[a-z]{2,3}$/i',$fn)) {
      
    $fn false;
    }else{
      
    $file $dir $fn;  
    }
      
    // verifico che il file esista
    if (!file_exists($file))
    {
      
    // se non esiste stampo un errore
      
    echo "Il file non esiste!";
    }else{
      
    // Se il file esiste...
      // Imposto gli header della pagina per forzare il download del file
      
    header("Cache-Control: public");
      
    header("Content-Description: File Transfer");
      
    header("Content-Disposition: attachment; filename= " $file);
      
    header("Content-Transfer-Encoding: binary");
      
    // Leggo il contenuto del file
      
    readfile($file);
    }
    ?>
    </body>
    </html>
    index.php
    Codice PHP:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <
    html xmlns="http://www.w3.org/1999/xhtml">
    <
    head>
    <
    meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <
    title>download</title>
    </
    head>
    <
    body>
    <
    form>
    <
    input type="button" style="background:#00F;color:#FFF;font-weight:bold;" onclick="document.location.href='force-download.php?filename=img.jpg';" value="Download ommagine" />
    </
    form>
    </
    body>
    </
    html
    Eseguendo l'index fa la verifica se il file esiste e mi da sempre l'errore il file non esiste anche specificando in modo diverso la dir, ma il file esiste nella cartella "force-download"

    Dove sta l'errore che non riesco a vedere?

    Grazie
    “Che le cose siano cosi, non vuol dire che debbano andare così. Solo che quando si tratta di rimboccarsi le maniche e incominciare a cambiare, vi è un prezzo da pagare. Ed è allora che la stragrande maggioranza preferisce lamentarsi più che fare”.

    Giovanni Falcone

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,503
    Commenta tutto il codice a partire da
    if (!file_exists($file))

    e subito prima di questo (quindi come effettiva ultima istruzione dello script) metti
    echo $file;

    verifica che il percorso, relativamente alla cartella in cui si trova lo script, sia corretto.

    Altra prova che puoi fare è di mettere il file da scaricare nella stessa cartella dello script file-download.php, così puoi non specificare $dir ed usare solo il nome del file, se funziona hai un problema con il percorso fino al file, altrimenti c'è qualche altra cosa che non va.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2014
    residenza
    Venezia
    Messaggi
    66
    ..hai provato a fare la stampa a video di $file per vedere se il percorso è corretto?

  4. #4
    Ho provato tutte queste soluzioni ma purtroppo non va!

    Il file da scaricare è nella cartella dello script, se metto il percorso in $dir mi dice il file non esiste, se non metto nulla tra gli apici di $dir mi da un socco di errori sulle linee dello script.

    Forse è meglio abbandonare questo script e farne uno nuovo?
    “Che le cose siano cosi, non vuol dire che debbano andare così. Solo che quando si tratta di rimboccarsi le maniche e incominciare a cambiare, vi è un prezzo da pagare. Ed è allora che la stragrande maggioranza preferisce lamentarsi più che fare”.

    Giovanni Falcone

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2014
    residenza
    Venezia
    Messaggi
    66
    qual'è l'ouput di
    echo $file ?

    qual'è l'ouput di

    $fn ?

    ...prova a rimuovere qualsiasi riferimento a $dir (visto che tutti i file stanno nella stessa cartella)...

  6. #6
    Quote Originariamente inviata da bedo1 Visualizza il messaggio
    qual'è l'ouput di
    echo $file ?

    qual'è l'ouput di

    $fn ?

    ...prova a rimuovere qualsiasi riferimento a $dir (visto che tutti i file stanno nella stessa cartella)...
    Innanzitutto ringrazio delle risposte!

    Gli output sono specificati nel primo post e come ho detto se tolgo qualsiasi riferimento in $dir, non fa più l'output del messaggio "il file non esiste" ma da svariati errori nelle varie righe del codice.

    Se è necessario posto l'output degli errori
    “Che le cose siano cosi, non vuol dire che debbano andare così. Solo che quando si tratta di rimboccarsi le maniche e incominciare a cambiare, vi è un prezzo da pagare. Ed è allora che la stragrande maggioranza preferisce lamentarsi più che fare”.

    Giovanni Falcone

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2014
    residenza
    Venezia
    Messaggi
    66
    ...forse mi sono espresso male..
    cosa dice l' echo di $file ?...cioè qual'è il percorso contenuto in $file?
    e qual'è l' echo di $fn ?
    ...se vuoi, posta gli errori, anche se da quel che ho capito riguardano situazioni derivate da una modifica del codice originale (che è quello da correggere)

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.