Corsi on-line

PHP: glob() come alternativa a opendir()

glob() è una funzione nativa di PHP, in parte sottoutilizzata, che ha il compito di ricercare dei percorsi (pathnames) sulla base della corrispondenza ad un pattern utilizzato come elemento per il confronto; essa restituisce un array contenente i file e le directory individuati tramite la ricerca eseguita. Per via di tali caratteristiche, glob() potrà essere utilizzata come alternativa ai costrutti basati su opendir() per l’apertura delle cartelle e a readdir() per la lettura dei contenuti presenti all’interno di esse.

PHPUn semplice pattern per i confronti potrebbe essere formato dal carattere jolly “*”, che in pratica significa “tutto” o “qualsiasi”, e da un’estensione, ad esempio “.png” come nell’esempio proposto di seguito:

foreach (glob("*.png") as $nomefile) {
    echo "Dimensione " . $nomefile . ": " . filesize($nomefile) . "\n";
}

Sostanzialmente tale ciclo permette di stampare il nome di ciascun file “.png” e di indicarne la dimensione tramite la funzione filesize(); nello stesso modo avremmo potuto effettuare una ricerca sulla base di un pattern come “a*.php”, questo allo scopo di estrarre soltanto i nomi di file “.php” che iniziano con la lettera “a”. Per rendere più preciso l’esito dei confronti sono disponibili alcuni flag, come per esempio GLOB_BRACE che permette di espandere l’espressione {a,b,c} in modo che la ricerca venga effettuata tenendo conto di ciascun elemento che essa contiene.

Il flag presentato potrà essere utilizzato per esempio per proporre più estensioni sulla base delle quali effettuare i confronti, come nello script seguente che estrae un file a caso da una directory purché esso sia un JPEG, un PNG o un’immagine GIF:

function img_casuale($directory) {
$immagine = glob($directory . '*.{jpg,jpeg,png,gif}', GLOB_BRACE);
shuffle($immagine);
return basename(array_pop($immagine));
}

Quando si intende utilizzare la funzione glob() è bene tenere presente che essa non opera su file remoti e che i file da analizzare dovranno essere accessibili tramite il filesystem del server corrente; inoltre essa non è utilizzabile su SunOS, mentre GLOB_BRACE non sarà disponibile su alcuni sistemi operativi Unix-based come Solaris OS. opendir() potrebbe rivelarsi più performante in alcune situazioni.

Per approfondire

Post correlati
I più letti del mese
Tematiche