PHP: Ordner, Dateien oder bestimmten Dateityp eines Verzeichnis auslesen mit nur einer Zeile Code

Achtung, in diesem Beispiel wird die PHP5-Funktion scandir() verwendet!

Dieses Thema kommt immer wieder auf: Man möchte alle Ordner, Dateien, oder bestimmte Dateitypen eines Verzeichnis auslesen. Dank der PHP5-Funktion scandir() und der schon länger geliebten Funktion preg_match() geht das mittlerweile quasi in einer Zeile. Zwar ist mein Ansatz nicht ganz unanfällig für Fehler, da theoretisch auch Ordner Punkte im Dateinamen enthalten können, aber mit diesem Wissen im Hintergrund und der Vermeidung eben solcher Schreibweisen verfügt man über eine – in meinen Augen – recht performante Lösung.

<?php
function getSubfolder($path){
	foreach(scandir($path) as $item)
	!preg_match("/\./", $item) ? $out .= $item.'<br/>' : NULL;
	return $out;
}
echo getSubfolder($_SERVER['DOCUMENT_ROOT']);
 
function getFile($path){
	foreach(scandir($path) as $item)
	preg_match("/\./", $item) && $item != '.' && $item != '..' ? $out .= $item.'<br/>' : NULL;
	return $out;
}
echo getFile($_SERVER['DOCUMENT_ROOT']);
 
function getFileByType($path, $type = 'jpg'){
	foreach(scandir($path) as $item)
	preg_match("/\.$type/", $item) && $item != '.' && $item != '..' ? $out .= $item.'<br/>' : NULL;
	return $out;
}
echo getFileByType($_SERVER['DOCUMENT_ROOT']);
?>
Als Textdatei öffnen | since1985de_76228e48.txt | 693 Byte

Ein Beispiel aus der Praxis

In einem Framework von mit verwende ich eine Variation, um Dateien per include_once() einzubinden.

<?php
function dirEachFileIncludeOnce($path){
    foreach(scandir($path) as $item) !preg_match("/\./", $item) ? include_once($path.$item.'/'.$item.'.php') : NULL;
}
?>
Als Textdatei öffnen | since1985de_12d9d71f.txt | 214 Byte