Newsgroup: it.comp.www.php
Titolo: Link download in php

Salve,
vorrei far vedere il conenuto di una directory e poi far si che si possono
downloadre i file (o con link o bottone).
Per far vedere il contenuto della directory non ci sono problemi..
ma per far scaricare i file non so come fare..!!
Il problema e che questa directory sta sotto alla directory www (diciamo
quella di root del server web).
Esiste qualche metodo in php?
Vi ringrazio
xoooox
---------------------------------------------------------------------------
Messaggio inviato attraverso 
http://www.trucchiperpc.it
 - sezione newsgroup

potresti fare uno script che si connetta via ftp e che prenda il file, 
ma non so di preciso come fare.. casomai cerca su google maggiori info! :-)


 ma per far scaricare i file non so come fare..!!
<?php
    # ATTENZIONE
    # non faccio nessun controllo sul nome del file, questa e' una falla
    # *ENORME*, va coperta
    if ($_GET['filename'] != '') {
        # sarebbe bello discriminare il content/type in base 
        # all'estensione
        header("Content-type: application/octet-stream");
        # nome del file
        header('Content-Disposition: attachment; 
            filename='.$_GET['filename']);
        # butto fuori il file
        readfile($_GET['filename']); 
 
        exit();
    }
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
        "
http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd
">
<html lang="it">
    <head>
        <title>prova</title>
    </head>
    <body>
        <div id="elenco">
<?php
    # suppongo che tu abbia i nomi dei file in un vettore che si chiama
    # $file, e che questo file sia nella cartella dei file da scaricare
 
    # filtro sui nomi dei file (non vogliamo far scaricare tutto, no ?)
    $filtro = array (
        '/\.php/' // script php
    );
    # stampo i link
    if (count ($file) > 0) {
        foreach($file as $n => $filo) {
            # controllo il nome del file
            foreach ($filtro as $rFiltro) {
                $filtrato = preg_match($rFiltro, $filo);
            }
            # se il nome ha passato il test
            if (!$filtrato) {
?>
            <a href="<?php print
$_SERVER[PHP_SELF].'?filename='.urlencode($filo); ?>"
title="scarica<?php print htmlentities($filo); ?>"><?php print $filo;
?></a><br />
<?php
            }
        }
    } else {
        print 'la cartella e\' vuota';
    }
?>
        </div>
    </body>
</html>
-- 

 Esiste qualche metodo in php?
Dunque, se il web server è configurato per visualizzare il contenuto delle
directory (non è una buona cosa) è molto semplice.
Basta che imposti un link alla directory ed il browser automaticamente ti
visualizzerà l'elenco dei file con tanto di link per scaricarli.
Altrimenti, devi fare tutto in php in questo modo:
if ($dir = @opendir("/tmp")) {
  while (($file = readdir($dir)) !== false) {
    echo "$file\n";
  }
  closedir($dir);
}
Chiaramente è un esempio stupido (preso dal manuale online).
Al posto di  echo "$file\n";  ci metti quello che ti serve.
Nel caso del downnload, puoi fare così:
echo "<a href='$file'>$file</a><br>\n";
In questo modo hai un link diretto al file.
Facendo tutto in PHP hai poi la possibilità di fare ordinamenti, filtri
ecc...
Ciao
Marco