Corsi on-line

glob() Vs. opendir()

Recentemente ho scoperto una funzione interessante di PHP che consente di visualizzare tutti i file presenti in una data cartella sul mio spazio web. La funzione in oggetto è glob() il cui utilizzo consente di sopperire al classico opendir(). L’utilizzo di glob() per elencare il contenuto di una directory è davvero semplice.

Supponiamo di voler estrarre da una ipotetica cartella “foto” tutti i file con estensione “jpg”:

foreach (glob("foto/*.jpg") as $filename) {
  echo basename($filename) . "<br>";
}

semplicissimo, no?
Se avessimo usato il classico opendir() il codice da scrivere sarebbe stato molto di più:

$dir = opendir ("foto/"); 
while (false !== ($file = readdir($dir))) { 
  if (strpos($file, '.jpg', 1)) { 
    echo basename($file) . "<br>"; 
  } 
} 

Tuttavia è bene sapere che in termini di prestazioni opendir() sembrerebbe essere più performante rispetto a glob(). Ecco un semplice listato che vi potrebbe essere utile per fare un test circa le performance delle due funzioni:

<?php
function microtime_float() 
{ 
  list ($msec, $sec) = explode(' ', microtime()); 
  $microtime = (float)$msec + (float)$sec; 
  return $microtime; 
} 

// verifico il tempo di esecuzione di opendir()
$start_time = microtime_float();
ob_start();
for ($x=0; $x<=20; $x++) {
  $dir = opendir ("foto/"); 
  while (false !== ($file = readdir($dir))) { 
    if (strpos($file, '.jpg', 1)) { 
      echo basename($file) . "<br>"; 
    } 
  }
}
ob_end_clean();
echo (microtime_float() - $start_time) . " (opendir time)<br />";

// verifico il tempo di esecuzione di glob()
$start_time = microtime_float();
ob_start();
for ($x=0; $x<=20; $x++) {
  foreach (glob("foto/*.jpg") as $filename) {
    echo basename($filename) . "<br>";
  }
}
ob_end_clean();
echo (microtime_float() - $start_time) . " (glob time)<br />";
?>

Nel mio caso ho effettuato un test caricando nella cartella “foto” 10 immagini jpg.
Il risultato è stato che opendir() risulta sempre più veloce di glob(). Ecco i miei risultati:

  • 0.0015790462493896 (opendir time)
  • 0.001716136932373 (glob time)

Lascio a voi le conclusioni.

Post correlati
I più letti del mese
Tematiche