Ho modificato leggermente il tuo codice per fargli fare quello che chiedi, ma è difficile spiegarti se non capisci il codice o non sai come modificarlo. In pratica ti ho messo la possibilità di definire una lista di estensioni che vuoi visualizzare dalle cartelle/sottocartelle della directory che scegli come base.
Le directory vengono stampate tutte, anche se non contengono nessun file di quelli che tu chiedi, perciò devi valutare se questo è un effetto che vuoi ottenere o se devi modificare la logica del programma.
Ho aggiunto qualche commento per aiutarti a capire il flusso. Non mi è chiaro cosa in tendo quando dici "devo invertire l'ordine dei file".
Fammi sapere se riesci a usarlo.
Ciao,
Rob
<?php
# Questa funzione permette di visualizzare un elenco a albero dei file e delle sottocartelle contenuti in $base.
# Ciascun nome visualizzato è un link al file.
# Copyright: Isacco Coccato
# NOTE:
# - Quando si specifica il percorso, NON mettere / alla fine.
# - Le immagini dei file e delle cartelle devono essere nella directory foto/
function elenco_dir($base, $included_extensions = [])
{
$dir_vuota = 1; # Flag per il controllo della directory vuota
if ($handle_dir = opendir($base)) # Apre la directory, e verifica che il percorso sia corretto
{
echo "<ul class=\"testo\">\n";
while (false !== ($dir = readdir($handle_dir))) # Legge una voce del finchè non è finita la directory, e la memorizza in $dir
{
if ($dir != "." && $dir != "..") #Evita di stampare "." e ".."
{
$dir_vuota = 0;
if(is_dir($base . "/" . $dir))
{
# Codice nel caso di directory
echo '<li style="list-style-image: url(foto/cartella.gif)"><b>' . $dir . "</b>\n";
elenco_dir($base . "/" . $dir);
echo "</li>\n";
}
else {
# Codice nel caso di file
# Evita di stampare alcuni tipi di file
# Elimina l'estensione dei file, qualunque sia la sua lunghezza, e anche se compaiono altri punti nel nome del file
if ($dir != "." && $dir != "..")
{
$file_extension = pathinfo($dir, PATHINFO_EXTENSION); # estrae l'estensione del file
# se è stata passata una lista di estensioni e quella in esame è nella lista, crea il link
if (!empty($included_extensions) && in_array($file_extension, $included_extensions))
{
echo '<li style="list-style-image: url(foto/file.gif)"><a href="' . $base . '/' . $dir . '">' . str_replace('_', ' ', substr($dir, 0, strrpos($dir, "."))) . "</a></li><br />";
}
}
}
}
}
if ($dir_vuota == 1)
{
echo '<li class="testo" style="list-style-image: url(foto/sbagliato.gif)">Nessun file presente</li>';
}
echo "</ul><br />";
closedir($handle_dir);
}
else #Codice nel caso di percorso non trovato
{
echo "Percorso errato";
}
}
/**
* Chiamata della funzione come esempio
*
* example usage:
* elenco_dir("pippo"); # tutti i file (inteso come tutte le estensioni) del folder "pippo" saranno visualizzati
* elenco_dir("../pluto", []); # idem come sopra
* elenco_dir("qui/quo/qua/", ["html"]); # solo i file html della cartella "qui/quo/qua" saranno visualizzati
*
* @param string nome della cartella di partenza (tutti i folder interni verranno esaminati)
* @param array elenco di estensioni che si vogliono visualizzare (anche una sola) - nessuna = tutte le estensioni
* @return void
**/
elenco_dir("../../testfolder/", ["php"]); // in questo caso solo i file "php" della cartella "testfolder" saranno visualizzati