Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Un rapido sguardo alla Standard PHP Library: Directory Iterator

Uno sguardo all'interfaccia Iterator, presente in PHP5, ed alla sua implementazione in DirectoryIterator.Un rapido sguardo alla Standard PHP Library: Directory Iterator
Uno sguardo all'interfaccia Iterator, presente in PHP5, ed alla sua implementazione in DirectoryIterator.Un rapido sguardo alla Standard PHP Library: Directory Iterator
Link copiato negli appunti

In realtà  il mio obiettivo iniziale per questo post era un'introduzione alla Standard PHP Library ma ho scoperto che Gabriele mi ha anticipato di un anno, scrivendo anche un articolo su Php.Html.it.

Poco male mi sono detto, cambierà focus e mi concentrerà su uno degli aspetti che più mi piace della SPL, ovvero l'interfaccia Iterator.

Iterator consente di accedere ad una collezione di elementi con le funzioni classiche di un array, indipendentemente dal tipo e dalle caratteristiche di questi elementi.

Passiamo subito agli esempi. Vi ricordate come si legge la lista dei file in PHP? Per rinfrescarvi la memoria ecco un breve esempio


if ($handle = opendir('/folder/path')) {
  while (($file = readdir($handle)) !== false) {
    if ($file != "." && $file != "..") {
      print "$file <br>";
    }
  }
  closedir($handle);
}

Se dovessimo "raccontare" codice diremmo qualcosa del tipo '/folder/path':

  1. Crea un riferimento ad una risorsa che rappresenta la directory
  2. Se il riferimento è valido prosegui
  3. Tenta di leggere il primo valore associato al riferimento e se si tratta di un file procedi
  4. Se il valore del file non è un puntamento alla cartella padre o se stessa procedi
  5. Stampa il file
  6. Esegui fino a che esistono risorse all'interno della cartella

Ma quanto è prolisso questo codice... non sarebbe bello poter dire qualcosa tipo:

  1. Carica la directory '/folder/path'
  2. Per ogni file nella directory stampa il nome

Bello vero? Traduciamolo in PHP con l'ausilio della classe DirectoryIterator.


$dir = new DirectoryIterator( '/folder/path/');
foreach($dir as $file) {
  print $file->getFilename();
}

Cavolo, ma allora si può fare davvero... e funziona!

Ebbene sì, grazie alla classe DirectoryIterator è possibile accedere in modo rapido e semplificato ai file di una directory ed alle loro caratteristiche.

Oltre al metodo ->getFilename() esiste una lunga lista di metodi che restituiscono le diverse proprietà  del file.

Ad esempio getSize() restituisce la dimensione in byte mentre isWritable() indica se il file è scrivibile dall'account in uso.


$dir = new DirectoryIterator( '/folder/path/');
foreach($dir as $file) {
  if (!$file->isDot() && !$file->isDir()) {
    print "<p>File name: " . $file->getFilename();
    print "<br>File size: " . number_format(($file->getSize()/1024), 2) . " Kb </p>";
  }
}

Sebbene questa classe sia parte della dotazione standard di PHP 5 ho notato pochissimi sistemi farne uso, così come pochissime sono le implementazioni dell'interfaccia Iterator disponibili in rete. Per mio uso personale ho realizzato due classi molto utili, chiamate FileIterator e CsvIterator, per scorrere rispettivamente il contenuto di file di testo e file CSV.

Voi l'avete mai utilizzata? La conoscevate?

Ti consigliamo anche