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

22. Dezember 2009

  • Eingeordnet unter: PHP
  • keine Antworten

PHP: Abfragen ob Datei auf einem externen Server vorhanden ist

In Zeiten offener APIs werden oftmals Daten von fremden Servern abgefragt. Soweit recht nützlich. Ein Problem gibt es nur, wenn diese Server nicht erreichbar sind.

Diese Script prüft ob die Datei $file geöffnet werden kann und unterbindet im gegenteiligen Fall die PHP-interne Fehlerausgabe (welche in diesem Fall nur eine Warnung ist) durch das @ vor der Funktion fopen. Über eine if-else Anweisung können eigene Regeln für die wechselseitige Ausgabe deklariert werden.

<?php
	$file = "http://ws.audioscrobbler.com/1.0/user/boringplanet/recenttracks.txt";
	if(@fopen($file, "r")) {
		echo "Datei existiert";
	}
	else {
		echo "Datei nicht gefunden!";
	}
?>
Als Textdatei öffnen | since1985de_b3477bc8.txt | 232 Byte

6. Dezember 2009

  • Eingeordnet unter: PHP
  • keine Antworten