Listare tutta una directory

<?php
function send($x)
{
   global $unfile;
   global $undir;
   $a = $x;   
   $localedir = opendir($a);
   $localedir2 = opendir($a);
   while(readdir($localedir))
   {   
      //Riapre la cartella
      $fdir = readdir($localedir2);   
      //Verifica che non sia una cartella di stato
      if($fdir != '.' && $fdir != '..')
      {
   
            //Controlla se è una cartella o un file.
            if(is_dir($a . '/' . $fdir))
            {
               $undir[] = $a . '/' . $fdir;
               $x = $a . '/' . $fdir;
               send($x);
            }   
            else
            {
            $tada = explode('.', $a . '/' . $fdir); //BUG 003, don't ask why...
            $ad = $tada[1];
            if((filetype($a . '/' . $fdir) == 'text/html') || (ereg('php', $ad)) || (ereg('asp', $ad))) //BUG 004
               $unfile[] = $a . '/' . $fdir;
            }   
      }            
   }
}

send($_SERVER['DOCUMENT_ROOT']);

echo '<pre><b>Cartelle</b><br />';
print_r($undir);
echo '</pre>';
echo '<pre><b>File</b><br />';
print_r($unfile);
echo '</pre>';            
?>

Questo script mi scrive due array, una contiene tutte le cartelle di DOCUMENT_ROOT (anche le sottocartelle fino all'osso... ;)) e un altra array con tutti i file (ancora una volta fino all'osso....  :buck:)

Però questo script non risolve il mio problema: io vorrei creare un unica array multidimensionale dove le sotto cartelle sono sotto array , lo stesso per i file per avere qualcosa del genere:

-cartella

--cartella

---file

---file

---cartella

---cartella

----file

-file

-file

--cartella

---cartella

---file

(quello è più o meno lo schema...)

Grazie mille...  O0

inviato 10 anni fa
wider
X 0 X

Prova ad usare questo script, ancora caldo di editor:

<?php
function recursive_dir_reader($dir, &$array) {
   if ($handle = opendir($dir)) {
      while (false !== ($file = readdir($handle))) {
         if ($file != "." && $file != "..") {
            if(is_dir($dir.'\\'.$file)) {
               $array[$file] = array();
               recursive_dir_reader( $dir.'\\'.$file, &$array[$file]);
            } else {
               $array[] = $file;
            }
         }
      }
      closedir($handle);
   }
}

$array = array();
$dir = 'C:\\cartella'; // metti quì il percorso da cui partire nella lettura del filesystem
recursive_dir_reader($dir, &$array);
echo "<pre>/n";
print_r($array);
echo "</pre>/n";
?>

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
modificato 10 anni fa
X 0 X

visto... perfetto...  ;D mannaggia al fatto che è ricorsiva, ma vabbè... non credo la velocità ne risenta troppo...  ::)

Un solo problema: come posso escludere le directory vuote e i file con estensione gif ?? grazie... :D

 :bye:

risposto 10 anni fa
wider
X 0 X

per escludere le GIF cambia la riga

$array[] = $file;

in

if(substr($file, -1, 3) != 'gif') $array[] = $file;

per escludere le cartelle vuote metti, appena prima della riga:

closedir($handle);

la seguente riga:

if(!count($array)) unset($array);

Non avendo provato queste modifiche ti consiglio di verificarle per bene.

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

per le estensioni ho fatto in modo diverso... anche se essendo ricorsiva la tua funzione aumento di un pochino il tempo di esecuzione... siccome in realtà devo escludere tutti i file tranne queli .htm o .html o .php o .php3 o .php4 o .php5, allora uso filetype()...

grazie mille

 :bye:

risposto 10 anni fa
wider
X 0 X

forse non ti sei accorto che anche la funzione che hai riportato è ricorsiva  :P

Comunque il fatto che sia ricorsiva non influisce in maniera pesante sui tempi d'esecuzione, e poi non ho idea di come riuscire ad ottenere lo stesso risultato in modo diverso  :dunno:

Se proprio vogliamo parlare di prestazioni allora ti faccio notare che il tuo codice usava due "ereg", l'istruzione PHP più lenta per la ricerca all'interno di stringhe.

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

infatti lo avevo visto che la mia funzione era ricorsiva... :D ma oltre ad essere ricorsiva nno funzioanava  :2funny:

---

non sapevo che ereg era così lenta... :S

In ogni caso grazie, mi prendo la funzione e vedo un po come risolvere il problema delle estenzioni...

 :bye: :bye:

risposto 10 anni fa
wider
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda