2010-01-13 5 views
41

Ich habe versucht, einen Weg zu finden, alle Dateien in einem Verzeichnis aufzulisten. Ich bin nicht gut genug mit PHP, um es alleine zu lösen, also hoffentlich kann hier jemand mir helfen.PHP: Liste aller Dateinamen, die in meinem Bilderverzeichnis enthalten sind

Ich brauche ein einfaches PHP-Skript, das alle Dateinamen in meinem Bilderverzeichnis in ein Array laden wird. Jede Hilfe würde sehr geschätzt werden, danke!

Antwort

92

Versuchen glob

Etwas wie:

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

Haha, PHP ist super :). – Raffael

+0

Wie bekomme ich es mit vollem Pfad? –

+0

Wie können wir alle Dateien in der Liste der Erweiterungen erhalten? Z.B. wenn wir alle .php und .js Dateien wollen? – Nis

16

scandir() - Liste Dateien und Verzeichnisse innerhalb des angegebenen Pfad

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

Produziert:

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

Wissen Sie, warum Scandir zwei Array-Schlüssel hat, die Perioden enthalten? Scheint irgendwie seltsam für mich. – lewisqic

+4

Kurz gesagt, die Punkte sind die Standard-Annotatoren für Verzeichnisse in Linux. Die einzelne Periode bezeichnet das aktuelle Verzeichnis und die doppelte Periode bezeichnet das übergeordnete Verzeichnis. –

10

Entweder scandir() wie an anderer Stelle vorgeschlagen oder

  • glob() - Finden pathnam es passend ein Muster

Beispiel

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

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

Oder über die Dateien im Verzeichnis zu gehen, sondern direkt eine Reihe von immer, verwenden

Beispiel

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

Um auch in Unterverzeichnissen zu gehen, verwenden RecursiveDirectoryIterator:

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

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

nur die Dateinamen aufzulisten (w \ out Verzeichnisse), entfernen RecursiveIteratorIterator::SELF_FIRST

+0

mit GLOB, wenn Sie diesen Fehler haben "PHP glob(): Mindestens eines der übergebenen Flags ist ungültig oder wird nicht unterstützt auf dieser Plattform in". Hier ist die Lösung: http://stackoverflow.com/questions/26763115/php-glob-at-least-one-of-the-passed-flags-isinvalid-or-not-supported-on-this. ** Nur für den Fall ** –

+0

@keke 1 entspricht 'GLOB_ERR', das in PHP 5.1.0 hinzugefügt wurde. Wenn das einen Fehler verursacht, verwenden Sie eine veraltete PHP-Version. Überlege, es zu aktualisieren. Andererseits ist es immer besser, die Konstante selbst anstelle ihres Werts zu verwenden, also hätte ich stattdessen "GLOB_ERR" verwenden sollen. Ich habe es jetzt aus der Antwort entfernt, weil es für den vorliegenden Anwendungsfall nicht benötigt wird. – Gordon

3

Sie können auch die Standard PHP Library ‚s DirectoryIterator Klasse verwenden, insbesondere die getFilename Methode:

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

das fügt auch hinzu. und .. so nicht eine gute Lösung – Rubytastic

+0

auch, es filtert nicht durch Erweiterungen und fügt Ihnen unnötige Dateien wie .thumb –

-1

Vielleicht kann diese Funktion in Zukunft nützlich sein. Sie können die Funktion manipulieren, wenn Sie Dinge wiederholen oder andere Dinge tun möchten.

$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

Dies wird nicht funktionieren, sollten Sie den rekursiven Aufruf zurückgeben, erhalten Sie eine Endlosschleife andernfalls –

1

Dies gibt Ihnen alle Dateien in Links.

<?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++; 
    } 
} 
?> 
Verwandte Themen