web-dev-qa-db-de.com

Die beste Möglichkeit, Dateien von einem Verzeichnis nach bestimmten Erweiterungen in PHP zu filtern

Mögliches Duplizieren:
PHP Liste bestimmter Dateien in einem Verzeichnis
benutze PHP Scandir ($ dir) und erhalte nur Bilder!

Im Moment habe ich ein Verzeichnis und erhalte eine Liste von Dateien

$dir_f = "whatever/random/";
$files = scandir($dir_f);

Dadurch werden jedoch alle Dateien in einem Verzeichnis abgerufen. Wie würde ich nur Dateien mit einer bestimmten Erweiterung wie .ini auf effizienteste Weise wiederherstellen.

25
CodeCrack

PHP bietet eine großartige Funktion, mit der Sie nur die Dateien erfassen können, die Sie benötigen. Es heißt glob()

glob - Findet nach einem Muster passende Pfadnamen

Hier ist ein Beispiel - 

$files = array();
foreach (glob("/path/to/folder/*.txt") as $file) {
  $files[] = $file;
}

Referenz - 

60
Lix

Wenn Sie mehrere Erweiterungen suchen möchten, ist preg_grep() eine Alternative zum Filtern:

 $files = preg_grep('~\.(jpeg|jpg|png)$~', scandir($dir_f));

Obwohl glob eine ähnliche zusätzliche Syntax hat. Dies ist vor allem dann sinnvoll, wenn Sie weitere Bedingungen haben, das Kennzeichen ~i für Groß- und Kleinschreibung hinzufügen oder kombinierte Listen filtern können.

12
mario

Mit der Funktion glob() von PHP können Sie ein Muster angeben, nach dem gesucht werden soll.

9
Linus Kleen

Sie können versuchen, GlobIterator zu verwenden.

$iterator = new \GlobIterator(__DIR__ . '/*.txt', FilesystemIterator::KEY_AS_FILENAME);
$array = iterator_to_array($iterator);
var_dump($array)
5
Baba

glob ($ pattern, $ flags)

<?php
foreach (glob("*.txt") as $filename) {
    echo "$filename size " . filesize($filename) . "\n";
}
?>

ich habe die Regex nicht getestet, aber so etwas:

if ($handle = opendir('/file/path')) {

    while (false !== ($entry = readdir($handle))) {
        if (preg_match('/\.txt$/', $entry)) {
            echo "$entry\n";
        }
    }

    closedir($handle);
}
1
firecracker

versuche dies 

//path to directory to scan
$directory = "../file/";

//get all image files with a .txt extension.
$file= glob($directory . "*.txt ");

//print each file name
foreach($file as $filew)
{
echo $filew;
$files[] = $filew; // to create the array

}
0
Database_Query