Visualizzazione risultati 1 fino 7 di 7

Discussione: Problema con script php che elenca file

  1. #1
    Data registrazione
    30-03-2009
    Residenza
    Bolzano
    Messaggi
    127

    Exclamation Problema con script php che elenca file

    Ciao a tutti, ho iniziato a programmare uno script php che elenca i file presenti in una data cartella, e consente all'utente di scaricali.
    Solo che non mi funziona !

    Vi posto il codice


    list.php
    Codice PHP:
    <?php
    echo "elenco file disponibili:<BR>";
    $cartella=dir("/membri/fabrizioroccapc/prove/php/download_file/");
    while (
    $f = $cartella->read())
    {
    if (
    $f!='.' && $f='..')
    {
    $dest="scarica.php?file=".$f;
    echo
    "<A HREF=".$dest.">scarica: ".$f."</A><BR>";
    }
    }
    $cartella->close();
    ?>
    download.php
    Codice PHP:
    <?php
    header
    ("Content-type:*");
    header("Content-Disposition: attachment; filename=".$GET['file']);
    readfile($_GET['file']);
    ?>

    Qualcuno può darmi una mano ?

    Grazie

  2. #2
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Ma ricevi qualche errore?
    Io ti consiglio di usare glob per fare la lista dei file:
    list.php
    Codice PHP:
    <?php
    echo 'elenco file disponibili:<BR>';
    $files = glob('/membri/fabrizioroccapc/prove/php/download_file/*.*');

    foreach(
    $files as $f) {
    $dest = 'scarica.php?file=' . $f;
    echo
    '<a href="' . $dest . '">Scarica: ' . $f . '</a><br>';
    }
    ?>
    scarica.php
    Codice PHP:
    <?php
    $file
    = @$_GET['file'];

    if(
    file_exists($file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.basename($file));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    ob_clean();
    flush();
    readfile($file);
    exit;
    }
    ?>
    Se hai attivato php5, dovrebbe essere tutto ok.

  3. #3
    Data registrazione
    30-03-2009
    Residenza
    Bolzano
    Messaggi
    127

    Predefinito

    Fantastico !!
    Funziona ! Grazie 1000 !

    Sai anche per caso come posso impedire lo scaricamento dei file .php
    (vorrei impedirlo perchè molti file .php nel mio sito contengono le impostazioni di connessione al database, in cui c'è scritta la password del sito)

  4. #4
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Certo:
    list.php
    Codice PHP:
    <?php
    echo 'elenco file disponibili:<BR>';
    $files = glob('/membri/fabrizioroccapc/prove/php/download_file/*.*');

    foreach(
    $files as $f) {
    $ext = strtolower(end(explode('.', $f)));

    if(
    $ext == 'php') // salta i files con estensione .php
    continue;

    $dest = 'scarica.php?file=' . $f;
    echo
    '<a href="' . $dest . '">Scarica: ' . $f . '</a><br>';
    }
    ?>
    e scarica.php
    Codice PHP:
    <?php
    $file
    = @$_GET['file'];
    $ext = strtolower(end(explode('.', $file)));

    if(
    $ext == 'php')
    die(
    'Non puoi scaricare i file .php');

    if(
    file_exists($file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.basename($file));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    ob_clean();
    flush();
    readfile($file);
    exit;
    }
    ?>

  5. #5
    Data registrazione
    30-03-2009
    Residenza
    Bolzano
    Messaggi
    127

    Predefinito

    Grazie! Se molto gentile !

    E un'ultimo cosetta, sai fare in modo che non si vede tutto il link completo al file (ovvero "/membri/fabrizioroccapc/ ... nome_del_file.bah") ma solamente il nome del file + la sua estensione ?
    Perchè io ho provato a modificarlo, ma poi non mi scaricava + il file

  6. #6
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Modifica list.php così:
    Codice PHP:
    <?php
    echo 'elenco file disponibili:<br>';
    $files = glob('/membri/fabrizioroccapc/prove/php/download_file/*.*');

    foreach(
    $files as $f) {
    $ext = strtolower(end(explode('.', $f)));
    if(
    $ext == 'php') // salta i files con estensione .php
    continue;

    $name = str_replace('/membri/fabrizioroccapc/prove/php/download_file/', '', $f);
    $dest = 'scarica.php?file=' . $f;
    echo
    '<a href="' . $dest . '">Scarica: ' . $name . '</a><br>';
    }
    ?>
    Il link contiene il percorso per intero mentre il tag <a> contiene il nome del file senza percorso. Spero vada bene.

  7. #7
    Data registrazione
    30-03-2009
    Residenza
    Bolzano
    Messaggi
    127

    Predefinito

    Perfetto !!!

    Grazie 100000 !

    Va che è una meraviglia !

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •