PDA

View Full Version : [php]aiuto con script che crea elenco files


flapane
06-01-2008, 19:24
Questo script
<?
/*
se il file è nella cartella radice e vuoi fare la lista dei file di una cartella figlio devi
inserire il path, altrimenti non trova la cartella e ti da errore. Se inserisci il carattere "."
vuol dire che cercherà nella cartella dove è questo file. Se inserisci il carattere ".." cercherà nella cartella precedente, e così via come in dos.
*/

$path="c:/Programmi";

/*
Questa è la fuzione che apre la directory. Gli va specificato il path ovvimente. La funzione restitusce un valore booleano.
*/

$dir=opendir("$path");

if($dir){

//la funzione readdir() legge i file presenti nella cartella finché non sono finiti!!
while ($file = readdir($dir)){

//controllo di non leggere i file nulli o le directory precendenti
if($file != '..' && $file !='.' && $file !=''){

echo "<A HREF=$path/$file>$file</A><br>"; //scrivo un link man mano che trovo file

}//fine if

}//fine while

closedir($dir);

clearstatcache();

}//fine if

else {echo "IMPOSSIBILE aprore la directory specificata!";}// in caso di errore appare questo!

?>

crea dinamicamente una pagina php con l'elenco dei files inseriti in una cartella...
c'è modo di farli apparire in ordine alfabetico?
Si può arrivare a
<?php
$path="ladirectory";

$dir = opendir("$path");

if($dir){

while ($file = readdir($dir)) {
if($file != '..' && $file !='.' && $file !=''){
$array_files = array("$file");
natsort($array_files);

echo "<ul>";
foreach ($array_files as $value => $valore) {
echo "<li><a href=\"$path/$valore\">$value - $valore</a></li>";
}
echo "</ul>";
}//fine IF
} //fine WHILE



// ordini l'array in modo NATURALE


closedir($dir);
clearstatcache();
} else {
echo "
<h1>Nessun file nella directory specificata!</h1>
";
}


?>


con natsort, ma invece restituisce lo stesso identico output dello script precedente, come mai?

kk3z
07-01-2008, 10:56
Con un'indentazione migliore si capisce meglio:
while ($file = readdir($dir))
{
if($file != '..' && $file !='.' && $file !='')
{
$array_files = array("$file");
natsort($array_files);
echo "<ul>";
foreach ($array_files as $value => $valore)
{
echo "<li><a href=\"$path/$valore\">$value - $valore</a></li>";
}
echo "</ul>";
}//fine IF
} //fine WHILE

L'errore è: $array_files = array("$file"); dove tu ogni volta crei un nuovo array (cancellando i valori precedenti)

Praticamente tu stai usando natsort su un array che contiene un valore, e poi lo mandi subito in output. Prova così:

while ($file = readdir($dir))
{
if($file != '..' && $file !='.' && $file !='')
{
$array_files[] = $file;
}//fine IF
} //fine WHILE

natsort($array_files);
echo "<ul>";
foreach ($array_files as $value => $valore)
{
echo "<li><a href=\"$path/$valore\">$value - $valore</a></li>";
}
echo "</ul>";

flapane
07-01-2008, 11:19
Esattamente, avevo il dubbio che l'array si ricreasse ogni volta, è come mi hanno consigliato in un altro forum, grazie.
Inoltre ci sarebbe l'alternativa con glob, che pure conserverò per altre occasioni.

$list=glob("directory/*.*");


natsort($list);
echo "<ul>";

foreach ($list as $file) echo "<li><a href=\"/$file\">$file</a></li>";

echo "</ul>";