Abrufen der Namen aller Dateien in einem Verzeichnis mit PHP

Aus irgendeinem Grund bekomme ich immer eine ‘1’ für die Dateinamen mit diesem Code:

if (is_dir($log_directory)) { if ($handle = opendir($log_directory)) { while($file = readdir($handle) !== FALSE) { $results_array[] = $file; } closedir($handle); } } 

Wenn ich jedes Element in $ results_array zurückmelde, erhalte ich eine Menge von 1en, nicht den Namen der Datei. Wie bekomme ich den Namen der Dateien?

Mach dir keine Sorgen über open / readdir und benutze stattdessen glob:

 foreach(glob($log_directory.'/*.*') as $file) { ... } 

SPL- Stil:

 foreach (new DirectoryIterator(__DIR__) as $file) { if ($file->isFile()) { print $file->getFilename() . "\n"; } } 

Überprüfen Sie die classn DirectoryIterator und SplFileInfo auf die Liste der verfügbaren Methoden, die Sie verwenden können.

Sie müssen $file = readdir($handle) mit Klammern umgeben.

Bitte schön:

 $log_directory = 'your_dir_name_here'; $results_array = array(); if (is_dir($log_directory)) { if ($handle = opendir($log_directory)) { //Notice the parentheses I added: while(($file = readdir($handle)) !== FALSE) { $results_array[] = $file; } closedir($handle); } } //Output findings foreach($results_array as $value) { echo $value . '
'; }

glob('*') einfach glob('*') . Hier ist Dokumentation

Da die angenommene Antwort zwei wichtige Lücken hat, poste ich die verbesserte Antwort für jene Neuankömmlinge, die nach einer richtigen Antwort suchen:

 foreach (array_filter(glob('/Path/To/*'), 'is_file') as $file) { // Do something with $file } 
  1. Das Filtern der globe functionsergebnisse mit is_file ist erforderlich, da möglicherweise auch einige Verzeichnisse zurückgegeben werden.
  2. Nicht alle Dateien haben a . in ihren Namen, so */* Muster saugt im Allgemeinen.

Ich habe einen kleineren Code:

 $path = "Pending2Post/"; $files = scandir($path); foreach ($files as &$value) { echo "".$value."
"; }

Es liegt an der Voreingenommenheit des Bedieners. Versuchen Sie es zu ändern:

 while(($file = readdir($handle)) !== FALSE) { $results_array[] = $file; } closedir($handle); 

Auf einigen Betriebssystemen erhalten Sie . .. und .DS_Store , Nun, wir können sie nicht benutzen, also lasst uns sie verstecken.

Zuerst starten Sie alle Informationen über die Dateien mit scandir()

 // Folder where you want to get all files names from $dir = "uploads/"; /* Hide this */ $hideName = array('.','..','.DS_Store'); // Sort in ascending order - this is default $files = scandir($dir); /* While this to there no more files are */ foreach($files as $filename) { if(!in_array($filename, $hideName)){ /* echo the name of the files */ echo "$filename"{
$filename}";
"; } }

glob() und FilesystemIterator :

 /* * glob() examples */ // get the array of full paths $result = glob( 'path/*' ); // get the array of file names $result = array_map( function( $item ) { return basename( $item ); }, glob( 'path/*' ) ); /* * FilesystemIterator examples */ // get the array of file names by using FilesystemIterator and array_map() $result = array_map( function( $item ) { // $item: SplFileInfo object return $item->getFilename(); }, iterator_to_array( new FilesystemIterator( 'path' ), false ) ); // get the array of file names by using FilesystemIterator and iterator_apply() filter $it = new FilesystemIterator( 'path' ); iterator_apply( $it, function( $item, &$result ) { // $item: FilesystemIterator object that points to current element $result[] = (string) $item; // The function must return TRUE in order to continue iterating return true; }, array( $it, &$result ) ); 

Sie könnten einfach die function scandir(Path) ausprobieren. es ist schnell und einfach zu implementieren

Syntax:

 $files = scandir("somePath"); 

Diese function gibt eine Liste der Datei in ein Array zurück.

Um das Ergebnis anzuzeigen, können Sie es versuchen

 var_dump($files); 

Oder

 foreach($files as $file) { echo $file."< br>"; } 

Hier ist ein fortgeschrittenes Beispiel für die Anzeige aller Dateien in einem Ordner

Eine andere Möglichkeit, Verzeichnisse und Dateien RecursiveTreeIterator , wäre die Verwendung des RecursiveTreeIterator , der hier beantwortet wird: https://stackoverflow.com/a/37548504/2032235 .

Eine ausführliche Erklärung von RecursiveIteratorIterator und Iteratoren in PHP finden Sie hier: https://stackoverflow.com/a/12236744/2032235

Ich benutze nur diesen Code:

 < ?php $directory = "Images"; echo "

$directory ...

"; $Files = glob("Images/S*.jpg"); foreach ($Files as $file) { echo "$file
"; } echo ""; ?>

Benutzen:

 if ($handle = opendir("C:\wamp\www\yoursite/download/")) { while (false !== ($entry = readdir($handle))) { if ($entry != "." && $entry != "..") { echo "" . preg_replace('/\\.[^.\\s]{3,4}$/', '', $entry) . ""; } } closedir($handle); } 

Quelle: http://chandreshrana.blogspot.com/2016/08/how-to-fetch-all-files-name-from-folder.html

Rekursiver Code zum Durchsuchen aller in einem Verzeichnis enthaltenen Dateien (‘$ path’ enthält den Pfad des Verzeichnisses):

 function explore_directory($path) { $scans = scandir($path); foreach($scans as $scan) { $new_path = $path.$scan; if(is_dir($new_path)) { $new_path = $new_path."/"; explore_directory($new_path); } else // A file { /* Body of code */ } } }