2010-01-13 10 views
41

He estado tratando de encontrar una manera de enumerar todos los archivos contenidos en un directorio. No soy lo suficientemente bueno con php para resolverlo solo, así que espero que alguien aquí me pueda ayudar.PHP: Obtener una lista de todos los nombres de archivo incluidos en mi directorio de imágenes

Necesito un script php simple que cargue todos los nombres de archivo contenidos en mi directorio de imágenes en una matriz. ¡Cualquier ayuda sería muy apreciada, gracias!

Respuesta

92

Trate glob

Algo como:

foreach(glob('./images/*.*') as $filename){ 
    echo $filename; 
} 
+10

Haha, PHP es increíble :). – Raffael

+0

¿Cómo conseguirlo con la ruta completa? –

+0

¿Cómo podemos obtener todos los archivos dentro de la lista de extensiones? P.ej. si queremos todos los archivos .php y .js? – Nis

16

scandir() - Lista los archivos y directorios ubicados en la ruta especificada

$images = scandir("images", 1); 
print_r($images); 

Produce:

Array 
(
    [0] => apples.jpg 
    [1] => oranges.png 
    [2] => grapes.gif 
    [3] => .. 
    [4] => . 
) 
+1

¿Sabes por qué scandir tiene dos teclas de matriz que contienen puntos? Me parece un poco extraño. – lewisqic

+4

En resumen, los períodos son los anotadores de directorio estándar en Linux. El período simple denota el directorio actual y el período doble denota el directorio padre. –

10

De cualquier scandir() como se sugiere en otro lugar o

  • glob() - Encuentra pathnam ES combinación de una estampa

Ejemplo

$images = glob("./images/*.gif"); 
print_r($images); 

/* outputs 
Array (
    [0] => 'an-image.gif' 
    [1] => 'another-image.gif' 
) 
*/ 

O, para caminar sobre los archivos en el directorio directamente en lugar de obtener una matriz, utilizar

Ejemplo

foreach (new DirectoryIterator('.') as $item) { 
    echo $item, PHP_EOL; 
} 

Para ir en subdirectorios, así, utilice RecursiveDirectoryIterator:

$items = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator('.'), 
    RecursiveIteratorIterator::SELF_FIRST 
); 

foreach($items as $item) { 
    echo $item, PHP_EOL; 
} 

sólo por mencionar los nombres de archivo (w \ Out), retire RecursiveIteratorIterator::SELF_FIRST

+0

con GLOB si tiene este error "PHP glob(): al menos uno de los indicadores pasados ​​no es válido o no es compatible con esta plataforma en". Aquí está la solución: http://stackoverflow.com/questions/26763115/php-glob-at-least-one-of-the-passed-flags-is-invalid-or-not-supported-on-this. ** por si acaso ** –

+0

@keke 1 corresponde a 'GLOB_ERR', que se agregó en PHP 5.1.0. Si eso causa un error, está usando una versión de PHP desactualizada. Considera actualizarlo. Por otra parte, siempre es mejor usar la constante en sí misma en lugar de su valor, así que debería haber usado 'GLOB_ERR' en su lugar en primer lugar. Lo eliminé de la respuesta ahora porque no es necesario para el uso de la caja en cuestión. – Gordon

3

También puede utilizar la clase Standard PHP Library 's DirectoryIterator, específicamente el método getFilename:

$dir = new DirectoryIterator("/path/to/images"); 
foreach ($dir as $fileinfo) { 
     echo $fileinfo->getFilename() . "\n"; 
} 
+1

esto también agrega. y .. así que no es una buena solución – Rubytastic

+0

también, no filtra por extensiones y agregará archivos innecesarios como .thumb –

-1

Tal vez esta función puede ser útil en el futuro. Puede manipular la función si necesita hacer eco de cosas o quiere hacer otras cosas.

$wavs = array(); 
$wavs = getAllFiles('folder_name',$wavs,'wav'); 

$allTypesOfFiles = array(); 
$wavs = getAllFiles('folder_name',$allTypesOfFiles); 

//explanation of arguments from the getAllFiles() function 
//$dir -> folder/directory you want to get all the files from. 
//$allFiles -> to store all the files in and return in the and. 
//$extension -> use this argument if you want to find specific files only, else keept empty to find all type of files. 

function getAllFiles($dir,$allFiles,$extension = null){ 
    $files = scandir($dir); 
    foreach($files as $file){   
     if(is_dir($dir.'/'.$file)) { 
      $allFiles = getAllFiles($dir.'/'.$file,$allFiles,$extension); 
     }else{ 
      if(empty($extension) || $extension == pathinfo($dir.'/'.$file)['extension']){ 
       array_push($allFiles,$dir.'/'.$file); 
      } 
     } 
    } 
    return $allFiles; 
} 
+0

Esto no funcionará, debe devolver la llamada recursiva, de lo contrario obtendrá un bucle infinito –

1

Esto le da todos los archivos de enlaces.

<?php 
$path = $_SERVER['DOCUMENT_ROOT']."/your_folder/"; 

$files = scandir($path); 
$count=1; 
foreach ($files as $filename) 
{ 
    if($filename=="." || $filename==".." || $filename=="download.php" || $filename=="index.php") 
    { 
     //this will not display specified files 
    } 
    else 
    { 
     echo "<label >".$count.".&nbsp;</label>"; 
     echo "<a href="download.php/?filename=".$filename."">".$filename."</a> 
"; 
     $count++; 
    } 
} 
?> 
Cuestiones relacionadas