2011-10-07 18 views
10

Questa è la parte iniziale del mio codice alla lista file in una directory:PHP: Come elencare i file in una directory senza sottodirectory sfogliare

$files = scandir($dir); 
$array = array(); 
foreach($files as $file) 
{ 
    if($file != '.' && $file != '..' && !is_dir($file)){ 
      .... 

Sto cercando di elencare tutti i file in una directory senza lista sottocartelle. Il codice funziona, ma mostra sia i file che le cartelle. Ho aggiunto !is_dir($file) come vedi nel mio codice sopra, ma i risultati sono sempre gli stessi.

risposta

18

dovrebbe essere come questo, penso:

$files = scandir($dir); 
foreach($files as $file) 
{ 
    if(is_file($dir.$file)){ 
     .... 
+0

ahhh, questo è tutto. Grazie – Pinkie

+1

Poiché "." e '..' sono le directory, "$ file! = '.' && $ file! = '..' && "è ridondante all'interno dell'espressione. E il separatore di dir finale non fa differenza. – symcbean

+0

grazie a @symcbean. Hai ragione. Li ho rimossi. – Pinkie

8

Basta usare is_file.

Esempio:

foreach($files as $file) 
{ 
    if(is_file($file)) 
    { 
     // Something 
    } 
} 
+0

ho potuto, ma per il mio esempio specifico Volevo sapere perché is_dir() non funzionava. Grazie +1 – Pinkie

1

Che dolore per qualcosa di così apparentemente semplice! Niente ha funzionato per me ... Per ottenere un risultato ho pensato che il nome del file avesse un'estensione che doveva nel mio caso.

if ($handle = opendir($opendir)) { 
    while (false !== ($entry = readdir($handle))) { 
     $pos = strpos($entry, '.'); 
     if ($entry != "." && $entry != ".." && is_numeric($pos) ) { 

............ buona entrata

+0

bene, lo hai sottolineato, ma ancora, ci sono tutti i giorni tutti i giorni file senza punti nel loro nome. – dachi

1

Questo esegue la scansione dei file quindi controllare se. o .. è in un array. Quindi spingere i file escludendo. e .. nella nuova matrice di file [].

Prova questa:

$scannedFiles = scandir($fullPath); 
$files = []; 

foreach ($scannedFiles as $file) { 
    if (!in_array(trim($file), ['.', '..'])) { 
     $files[] = $file; 
    } 
} 
+0

Ciao, benvenuto inStackOverflow. Si prega di aggiungere alcune spiegazioni al codice. – Chaithanya

Problemi correlati