Diese Funktion liest die Namen aller Dateien und Ordner in einem Verzeichnis ein und gibt diese in einem Array zurück, welches danach etwa mit einer Schleife aufgelistet werden kann.
Die Dateien können zusätzlich auf bestimmte Typen beschränkt und die Auflistung von Ordner deaktiviert werden.
<?php
// Dateien und Ordner aus einem Verzeichnis ermitteln
function list_dir($path, $extensions = '', $list_folder = false) {
// Prüfen ob das Verzeichnis existiert
if (!file_exists($path)) {
return array();
}
// Liste erlaubter Erweiterungen erstellen
if (!empty($extensions)) {
$extensions = explode(',', $extensions);
}
// Pfad um Backslash am Schluss ergänzen
$path = rtrim($path, '/') . '/';
// Ordner öffnen und alle Einträge durchlaufen
$dh = opendir($path);
$list = array();
while ($file = readdir($dh)) {
$is_dir = is_dir($path . $file);
// Ordner überspringen, falls nicht erwünscht
if ((!$list_folder && $is_dir) ||
// Sprungmarken überspringen
($file == '.' || $file == '..') ||
// Unerwünschte Dateitypen überspringen
($extensions && !$is_dir &&
!in_array(strtolower(substr(strrchr($file, '.'), 1)), $extensions))) {
continue;
}
// Datei zur Liste hinzufügen
$list[] = $file;
}
// Ordner schließen und Liste zurückgeben
closedir($dh);
return $list;
}
?>
Als Parameter erwartet die Funktion den Pfad des auszulesenden Verzeichnisses, relativ zum Script. Optional kann als zweiter Parameter eine Liste zugelassener Dateierweiterungen angegeben werden (einzelne Erweiterungen durch ein Komma trennen). Der dritte Parameter ist ebenfalls optional und aktiviert die Auflistung von Ordnern.
Nachfolgend noch ein paar Beispielaufrufe mit verschiedenen Optionen:
<?php
// Beispielaufruf 1: Alle Dateien
$path = 'uploads';
$files = list_dir($path);
echo '<ul>';
foreach ($files as $file) {
echo '<li>' . $file . '</li>';
}
echo '</ul>';
// Beispielaufruf 2: Alle Dateien und Ordner
$files = list_dir($path, '', true);
// Beispielaufruf 3: Nur HTML und PHP Dateien
$files = list_dir($path, 'html,php');
// Beispielaufruf 4: Nur HTML und PHP Dateien, sowie Ordner
$files = list_dir($path, 'html,php', true);
?>