Elencare file e directory tramite il linguaggio php.
ALLWEB free
Web Directory Script Linguaggi
Italiano Inglese Tutte
 
 24 Nov 2014
aggiungi in preferiti  
Home    Mappa directory    Script




Leggere il contenuto delle directory (2°):

Lo script si articola in due parti: Nella prima parte abbiamo visualizzato un semplice esempio che consente di leggere all'interno di una directory sia i file che le sottodirectory contenute, nella seconda parte vedremo il codice ed analizzeremo le funzioni in esso contenute.


Codice:

N.B. Se avete intenzione di utilizzare questo script o le funzioni in esso contenute fate molta attenzione alla sicurezza (vedi in fondo).

<?
$a=$_GET['a'];//recupero la variabile della directory
if(!isset($a)){$a="articolo_php_dir";}//se non esiste la variabile la associo alla directory principale
$f=opendir('/home/httpd/vhosts/vostrosito.it/httpdocs/'.$a);//apro la directory
while(false!==($g=readdir($f))){//ciclo while che legge dentro la directory fino a quando non trova un valore false
if($g!="." && $g!="..") {//elimino il punto ed i doppi punti
if(is_dir('/home/httpd/vhosts/vostrosito.it/httpdocs/'.$a."/".$g)){//creo un array con le directory trovate
$array_dir[]=$g;
}
if(is_file('/home/httpd/vhosts/vostrosito.it/httpdocs/'.$a."/".$g)){//creo un array con i file trovati
$array_file[]=$g;;
$numg++;//numero di file trovati
}
}
}
closedir($f);//chiudo la directory

//adesso creo la tabella ed espongo i risultati a video:
echo"<table cellpadding=\"10\" style=\"border:2px dotted #0000FF\"><tr><td>
<img src=\"riga2.gif\"><a href=\"articolo_php_leggere_file_e_directory.php?a=articolo_php_dir\"> articolo_php_dir</a><br>";
$conto1=count($array_dir);
if($conto1>0){
for($b=0; $b<$conto1; $b++){//mostro le directory
echo"<img src=\"riga1.gif\"><a href=\"articolo_php_leggere_file_e _directory.php?a=".$a."/".$array_dir[$b]."\">".$array_dir[$b]."</a><br>";
}
}
else{
echo"<img src=\"riga1.gif\">".$a."<br>";//mostro il nome della directory attuale senza il link (se sono in una sotto directory (l'array è vuoto))
}
echo"</td></tr><tr><td style=\"border-top:2px dotted #0000FF\">
<br><b>CONTENUTO:</b><br>
<br>Trovati ".$numg." elementi<br><br>";
$conto2=count($array_file);
for($b=0; $b<$conto2; $b++){//mostro i file (in questo caso immagini)
echo"<img src=\"".$a."/".$array_file[$b]."\" width=\"100\" height=\"100\"> ";
}
echo"</td></tr></table>";
?>

N.B. Per problemi legati all'impaginazione i commenti potrebbero stare su più righe consecutive. Se il codice vi crea dei problemi cancellateli tutti (un commento deve stare su una sola riga).


Funzioni:

$x=opendir();
Funzione che apre una directory. La variabile a cui viene associata diviene un puntatore a quella apertura di directory. Ogni volta che sarà presente nello script la macchina saprà che qualunque operazione debba compiere si riferisce a quella directory.

$x=readdir();
Con questa funzione associamo il valore di una directory all'interno di una variabile.

is_dir()
Verifica se un dato è una directory, restituisce un valore booleano (true o false). Il tipo di valore da inserire dipenda dalla versione di php che avete sul server (anche url se php5).

is_file()
Verifica se un dato è un file, restituisce un valore booleano (true o false). Il tipo di valore da inserire dipenda dalla versione di php che avete sul server (anche url se php5).


Spiegazione esempio:

L'unica cosa degna di nota è il ciclo while per verificare i dati contenuti all'interno della directory.
while(false!==($g=readdir($f)))
Per leggere una directory è prassi scrivere un ciclo while del genere, dove in pratica ordiniamo alla macchina di leggere il contenuto del file (eseguendo operazioni distinte per ogni valore trovato), fino a quando non troviamo false che in sostanza vuol dire nessun elemento (abbiamo terminato i file in directory).


errori e SICUREZZA:

Lo script potrebbe non funzionare per l'errato inserimento del nome o percorso directory.
Inoltre è possibile che un nome directory tipo 0 (zero) oppure null o addirittura false possa far interrompere il ciclo while prima che termini la scansione di tutta la directory.

SICUREZZA:
Quando inseriamo uno script che opera con le directory ed i file direttamente sul nostro spazio web dobbiamo porre molta attenzione alla SICUREZZA.
LO SCRIPT DELL'ESEMPIO NON È SICURO!!
Per un motivo molto semplice, in pratica spedisce i dati con il metodo _GET, un malintenzionato potrebbe modificare l'URL della pagina e guardare un'altra directory del vostro sito, dove magari avete depositato un file che contiene informazioni personali!!
Come eliminare il problema:
La soluzione più breve e semplice è quella di inserire un ciclo if che controlli il valore della variabile passata tramite l'url e verificare che il suo valore sia uguale a quello di una delle vostre directory, in caso contrario mostrate un errore a video.

Se il numero di sottodirectory è elevato potrete inserire i loro valori in un array e verificare se il dato contenuto nella variabile vi è contenuto (Operazione eseguibile anche in automatico implementando lo script con un'altra scansione directory preventiva).



1° parte (esempio)