Ciao a tutti.
Sto creando una pagina PHP che permette agli utenti di sfogliare/visualizzare cartelle e files del server.
In pratica viene passata, ad una funzione PHP, una stringa (es. "localhost/miosito/documenti") presa dal DB in base alla $_GET["w"] passata in querystring, che altro non è che la root principale di dove si deve partire a visualizzare file e cartelle.
Vengono quindi visualizzate le cartelle di questa root principale e creati dei DIV nascosti contenenti le proprie eventuali sottodirectory (e files).
Ognuno di questi DIV è ovviamente indicizzato:
<div id="0">Sotto_Cartella_1</div>
<div id="1">Sotto_Cartella_2</div>
<div id="2">Sotto_Cartella_3</div>
in modo tale da cliccare sul link e renderlo visibile in base a quale cartella si vuole sfogliare.
La funzione viene poi richiamata all' interno della stessa per creare tutti i DIV nascosti delle varie sottodirectory da poter visualizzare. Diciamo che a me personalmente, nel mio ambiente che non è quello di produzione, tutta sta roba qui funziona, devo solo fare qualche ritocchino.
La persona che invece si occupa di testarlo per poi metterlo in produzione, mi dice che funziona all' 80%, nel senso che se ci sono tantissime sottocartelle un po' le apre correttamente mentre per altre vengono aperte cartelle non corrispondenti a quelle trovate nel disco del server. Posto il codice, è un po' lungo mi spiace, ma spero che magari possa essere utile a qualcuno visto che un po' funziona e magari è un errore banale.

[code]
<?php
//Se sono settate le variabili GET che mi servono per
//il download, lo forzo per non fare aprire il file
//nel browser
if(isset($_GET["dwn"]) and isset($_GET["path"]))
{
header('Pragma: private');
header('Cache-control: private, must-revalidate');
header("Content-Type: application/octet-stream");
header("Content-Length: " .(string)(filesize($_GET["path"])) );
header('Content-Disposition: attachment; filename="'.($_GET["dwn"]).'"');readfile($_GET["path"]);
exit;
}
session_start();
?>
<!--Creo una funzione js che visualizza/nasconde le directory trovate-->
<script type="text/javascript">
function display(div)
{
var element = document.getElementById(div);
var elementIMG = document.getElementById('img_folder_' + div);
if(element.style.visibility == 'hidden')
{
element.style.visibility='visible';
element.style.position='relative';
elementIMG.src = '../../image/folder_opened.jpg';
}
else
{
element.style.visibility='hidden';
element.style.position='absolute';
elementIMG.src = '../../image/folder_closed.jpg';
}
}
</script>

<?php
//Carico il database.inc contenente le specifiche del database
include("../../include/database.inc");

//Definisco la connessione al db server
$db_connection = mysql_connect($host_name, $_SESSION['user_name'], $_SESSION['user_password']);

//Connessione al database
mysql_select_db($dbname, $db_connection);

//Se è settata la $_GET["w"] che decide quale stringa
//va passata alla funzione opendir()
if(isset($_GET["w"]))
{
//Leggo nel DB qual' è la directory da sfogliare
$sql = "SELECT dir FROM t_documents_consultation WHERE id = ".$_GET["w"];
$result = mysql_query($sql);
$row = mysql_fetch_array($result);
$Directory = $row["dir"];

//Creo una funzione per richiamarla ogni volta
//che desidero sfogliare una sottodirectory
function ScanDirectory($Directory, $sd)
{
$MyDirectory = opendir($Directory) or die('Error');

//Creo un paio di contatori
$i = 0; //contatore per iterare l' array con le cartelle
$u = 0; //contatore per iterare l' array con i file

//Creo l' array che conterrà le cartelle trovate
$dir_list = array();

//Visualizzo il contenuto della directory
while(false !== ($file = readdir($MyDirectory)))
{
//SE E' UNA CARTELLA
//visualizzo il nome con link apposito da rendere
//visibile/nascosto il div col proprio contenuto
if((is_dir($Directory."/".$file))&($file!=".")&($file!=".."))
{
//popolo un' array con le cartelle trovate
$dir_list[] = $file;

//Stampo a video la cartella linkata con l' onclick
//da passare alla funzione javascript
echo "<img src='../../image/folder_closed.jpg' width='20' align='center' id='img_folder_".$sd."'>\n";
echo "&nbsp;<a href='#' onclick='display(\"".$sd."\")'>".$dir_list[$i]."</a><br>\n"; echo "<div style='padding:5px; border-left: solid 1px #cccccc; margin-left:10px; visibility:hidden; position:absolute;' id='".$sd."'>\n";

//Richiamo nuovamente la funzione che sfoglia le directory
//per sfogliare le sottodirectory e ricreare dei DIV da
//poter visualizzare/nascondere
ScanDirectory($Directory.$file."/", $sd."_".$i);
echo "</div>\n";
$i++; //incremento il contatore
$sd++; //incremento l' id da assegnare al prossimo DIV
}

//SE E' UN FILE
//mostro a video il link allo stesso
elseif ((!is_dir($Directory.$file))&($Directory.$file!=". ")&($Directory.$file!=".."))
{
$file_list[] = $file;
echo '<img src="../../image/file_icon.jpg" width="20" /> <a href="documents_consultation.php?w=&dwn='.$file.'& path='.$Directory.$file.'">'.$file_list[$u].'</a><br>';
$u++;
}
}
closedir($MyDirectory);
}

//Richiamo la funzione passando quale directory
//deve sfogliare e la variabile $sd settata su 0 che
//serve per dare gli id progressivi ai DIV contententi
//i nomi delle cartelle trovate
ScanDirectory($Directory, 0);
}

?>
[/PHP]