Files e cartelle: opendir

Gli argomenti di questa pagina

  • La funzione opendir()
  • Le funzioni personali usate con opendir()
  • Richiamare le funzioni personali

La funzione opendir()

La funzione opendir() apre l'handle della directory, ossia un canale che permette la comunicazione con la directory da usare nelle chiamate alle funzioni readdir(), closedir().

La sintassi è: opendir(directory, [context]).
directory è il percorso della cartella da aprire
context è un parametro opzionale ed è una serie di opzioni che possono modificare il comportamento di un flusso dei dati letti: generalmente non viene usato.
Dopo aver aperto il canale di comunicazione è possibile usare la funzione readdir() per leggere il contenuto della cartella e, alla fine chbiudere questo canale per liberare risorse tramite la funzione closedir()

Per la funzione readdir() la sintassi è: readdir(dir_handle).
dir_handle è il canale precedentemente aperto con opendir() e restituisce un nome del file se viene letto qualche file o cartella oppure FALSE in caso di fallimento

Queste le funzioni. In questo elenco di funzioni è da notare la funzione info() che restituisce la estensione dei files. Conoscere questa estensione serve alla funzione files_filtered_list() che elenca i files filtrati col filtro.
Per leggere i vali elementi di una cartella usiamo queste funzioni:

  1. dir_list(): per leggere le sole cartelle
  2. files_list(): per leggere i soli files
  3. full_list(): per leggere tutto il contenuto di una cartella
  4. folder_files_list(): è come la precedente ma raggruppa prima tutte le cartelle e poi i files
  5. files_filtered_list(): per leggere i files di una cartella scegliendo solo i files che hanno determinate estensioni

Le funzioni personali usate con opendir()

Qui di seguito una serie di funzioni personali usate per la funzione PHP opendir()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
<?php
function info($nome_file) {
    
//    restituisce l'estensione del file
    
$file_info pathinfo($nome_file); 
    return 
$file_info['extension'];
}
//    ======================================================================
function dir_list($directory FALSE) {
    
//    per leggere le sole cartelle
    
if (!$directory) {
        
$directory ".";
    }
    
$dirs= array();
    if (
$handle opendir("./" $directory)) {
        while (
$file readdir($handle)) {
            if (
is_dir($directory."/".$file)) {
                if (
$file != "." $file != ".."$dirs[] = $file
            }
        }
    }
    
closedir($handle);
    
reset($dirs); sort($dirs); reset($dirs);
    return 
$dirs;
}
//    ======================================================================
function files_list($directory FALSE) {
    
//    per leggere i soli files
    
if (!$directory) {
        
$directory ".";
    }
    
$files = array();
    if (
$handle opendir("./" $directory)) {
        while (
$file readdir($handle)) {
            if (
is_file($directory."/".$file)) {
                
$files[] = $file
//                if ($file != "." & $file != "..") $files[] = $file; 
            
}
        }
    }
    
closedir($handle);
    
reset($files); sort($files); reset($files);
    return 
$files;
}
//    ======================================================================
function full_list($directory FALSE) {
    
//    per leggere tutto il contenuto di una cartella
    
if (!$directory) {
        
$directory ".";
    }
    
$full= array();
    if (
$handle opendir("./" $directory)) {
        while (
$file readdir($handle)) {
            if (
$file != "." $file != ".."$full[] = $file
        }
    }
    
closedir($handle);
    
reset($full); sort($full); reset($full);
    return 
$full;
}
//    ======================================================================
function folder_files_list($directory){
    
//    come la precedente ma raggruppa prima tutte le cartelle e poi i files
    
if ($handle opendir("./" $directory)) {
        
$list_folder = array();
        
$list_files = array();
        while (
$entry readdir($handle)) {
            if (
$entry != "." $entry != "..") {
                if(
is_dir($directory.$entry)) {
                    
$list_folder[] = $entry;
                } elseif (
is_file($directory.$entry)) {
                    
$list_files[] = $entry;
                }
            }
        }
        
$result array_merge($list_folder$list_files);
        return 
$result;
    }
}
//    ======================================================================
function files_filtered_list($directory$extensions) {
    
//    per leggere i files di una cartella scegliendo solo i files che hanno determinate estensioni
    
$full= array();
    if (
$handle opendir("./" $directory)) {
        while (
$file readdir($handle)) {
            
$ext info($directory.$file);
            if (
in_array ($ext$extensions)) {
                
$full[] = $file;
            }
        }
    }
    
closedir($handle);
    
reset($full); sort($full); reset($full);
    return 
$full;
}
?>

Richiamare le funzioni personali

Le istruzioni per richiamare le funzioni sono quelle qui di seguito mostrate.
La matrice $extensions serve per chiamare la funzione files_filtered_list() nella quale i files vengono filtrati in base alle estensioni memorizzate nella matrice.
Anche se si vuole filtrare i files in base ad una sola estensione, è necessario passare tale estensione, come argomento della funzione, tramite la matrice.

1
2
3
4
5
6
7
8
9
10
11
<?php
$extensions 
= array ("php""txt""gif");                                    //    serve per raccogliere i files filtrati
$source_folder "folder_sample/";                                            //    una sottocartella della cartella in cui si sta lavorando
//$source_folder = "";                                                        //    la cartella di lavoro
//$source_folder = "../";                                                    //    per risalire di una cartella da quella corrente
$array_dir dir_list($source_folder);                                        //    legge le sottocartelle della cartella indicata
$array_files files_list($source_folder);                                    //    legge i files della cartella indicata
$array_full full_list($source_folder);                                    //    legge tutti gli oggetti della cartella indicata
$array_full_list folder_files_list($source_folder);                        //    come la precedente ma raggruppa prima tutte le cartelle e poi i files
$array_filtered_files files_filtered_list($source_folder$extensions);    //    per leggere i files di una cartella con determinate estensioni
?>

Questo il risultato che si ottiene. Tutti gli script che usano queste funzioni visualizzano i dati col semplice ciclo FOR qui sotto indicato.

1
2
3
4
5
<?php
for($i=0$i count($array); $i++) {
    echo 
$array[$i] . "<br />\n";
}
?>

Questo è quel che si ottiene con ciascuna delle funzioni qui sopra indicate.

Ecco una prova per la lettura di una cartellaapri in popup

 

 



settore tecnico il sito di lorettabweb il Forum di sostegno
il forum il forum il forum