Elencare file e directory tramite il linguaggio php.
ALLWEB free
Web Directory Script Linguaggi
Italiano Inglese Tutte
 
 04 Feb 2012
rss directory aggiungi in preferiti  
Home    Mappa directory    Giochi    XXXDirectory    Script    Forum




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)