Corso PHP: 21 - Alcuni esempi di funzioni relative a files/directories

Proponiamo ora alcune funzioni scritte in PHP in alcuni casi utili per il trattamento di files e directories o perlomeno ai fini esemplificativi. Iniziamo con quattro funzioni che listano i files di una directory:

1. wwGetFiles

Questa funzione ritorna un array con tutti i files di una directory. Il nome della directory è passato come parametro. Nessun file viene escluso. Script:  
<?php
function wwGetFiles($dir) {
//--------------------------------------
// Ritorna un array con i files di $dir
//--------------------------------------
  $filesarray=array();
  if (is_dir($dir)) {      // Verifica che $dir sia una directory
    if ($dh = opendir($dir)) { // apre la directory
      $n = 0;
      while (($file = readdir($dh)) !== false) {
        $filesarray[$n] = $file;
        $n++;
      }
      closedir($dh);
    }
  }
  return $filesarray;
}
?>

2. wwGetFilesExt

Questa seconda funzione cerca in una directory e lista i file con una determinata estensione.  Il nome della directory e l’estensione del file sono passati come parametri.


Script:  
<?php
function wwGetFilesExt($dir, $ext) {
//---------------------------------------------------------------------
// Ritorna un array con i files di estension $ext (senza il .) in $dir
//---------------------------------------------------------------------
  $filesarray=array();
  $ext=strtolower($ext);
  $path = pathinfo($dir);
  if (is_dir($dir)) {      // Verifica che $dir sia una directory
    if ($dh = opendir($dir)) { // apre la directory
      $n = 0;
      while (($file = readdir($dh)) !== false) {
        $extension = pathinfo($file, PATHINFO_EXTENSION);
        if (strtolower($extension) == $ext) {
          $filesarray[$n] = $file;
          $n++;
        }
      }
      closedir($dh);
    }
  }
  return $filesarray;
}
?>

3. wwGetFilesPattern

Con questa funzione vogliamo listare tutti i files di una directory che rispettano un determinato pattern. Nome della directory ed il pattern vanno passati come parametri. Si sfrutta la funzione PHP glob illustrata al capitolo 19. Script:  
<?php
function wwGetFilesPattern($dir, $pattern) {
//-----------------------------------------------------------------------------
// Ritorna un array con i files di $dir che hanno un match col pattern fornito
//-----------------------------------------------------------------------------
  $char = substr($dir, -1, 1);
  $slash = (($char=="/") || ($char=="\\")) ? $slash="" : "/";
  if (is_dir($dir)) {      // Verifica che $dir sia una directory
    $files = glob($dir.$slash.$pattern);
  }
  return $files;
}
?>

4. wwGetFilesPattern

Questa funzione è un po’ più sofisticata e lista tutti i files di una directory con esclusione di quelli con estensione pari ad una di quelle da escludere fornite in un array, di tutte le subdirectories e del file stesso in esecuzione. Script:  
<?php
function wwGetFilesExclusions($dir, $exclusions) {
//-----------------------------------------------------
// Ritorna un array con i files di $dir con esclusione
// di quelli con estensione inclusa nell'array fornito
// e di tutte le subdirectories.
//-----------------------------------------------------
  $files = array();
  for ($i=0; $i<count($exclusions); $i++) {  // trasformiamo le estensioni in lowercase
    $exclusions[$i] = strtolower($exclusions[$i]);
  }
  if (is_dir($dir)) {     // Verifica che $dir sia una directory
    if ($dh = opendir($dir)) { // apre la directory
      while (($file = readdir($dh)) !== false) {
        $extension = strtolower(pathinfo($file, PATHINFO_EXTENSION));
        if (!in_array($extension, $exclusions) &&  // se non ha un'estensione da escludere
          (!is_dir($file)) &&  // se non è una directory
          ($file != basename($_SERVER['PHP_SELF']))) {  // se non è il presente file
          $files[]=$file;
        }
      }
    }
  }
  return $files;
}
?>
Vi lasciamo il compito di scrivere, anche solo per esercizio, una funzione che, per esempio, prelevi la lista di tutti i files di una directory che abbiano estensione pari ad una di quelle fornite in un array, magari col nome file che abbia un match con un predefinito pattern.   Vediamo ora tre esempi di funzioni per ottenere nome file ed estensione separatamente sfruttando le funzioni standard. Si tratta di funzioni piuttosto banali, ma utili soprattutto perché più semplici da ricordare e da scrivere.  
<?php
function wwGetExtension($path) {
//----------------------------------
// Ritorna l'estensione di un file
//----------------------------------
  return strtolower(pathinfo($path, PATHINFO_EXTENSION));
}
//===================================================================

function wwGetFileName($path) {
//---------------------------------------------------------
// Ritorna il nome di un file senza la path e l'estensione
//---------------------------------------------------------
  $ext=".".pathinfo($path, PATHINFO_EXTENSION);
  return basename($path, $ext);
}
//===================================================================

function wwSplitFileName($path) {
//----------------------------------------------------------------------
// Ritorna un array con 2 elementi: il nome del file e la sua estensione
//----------------------------------------------------------------------
  $name=wwGetFileName($path);
  $ext=wwGetExtension($path);
  return array($name, $ext);
}
?>
In particolare con la terza funzione, wwSplitFileName, si possono ottenere nome ed estensione separatamente nei due elementi dell’array. Per esempio così:  
<php
$SplittedFile=wwSplitFileName($path);
$Nome=$SplittedFile[0];
$Estensione=$SplittedFile[1];
?>
Nel file che potete trovare qui abbiamo incluso tutte le funzioni descritte in questo articolo.

Commenti

(Occorre fare login per commentare - Se non sei registrato puoi farlo cliccando su "accedi")