Helferfunktion: GetDir

13. Januar 2008

Dieses Szenario haben PHP-Entwickler sicher das eine oder andere Mal: Ein Verzeichnis auslesen. Unter PHP gibt es dafür eine Reihe von Funktionen, welche aber meist einiges an Arbeit machen. Zuerst das Verzeichnis öffnen, dann Eintrag für Eintrag auslesen und dann die virtuellen Verzeichnisse . und .. ausfiltern. Mit einer Funktion lässt sich das viel einfacher lösen. Hier ist meine GetDir():

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/**
 * Reads a dir and returns it as array
 * @author Michael Mayr (http://michfrm.net)
 * @param string $path Path to read (absolute preferred)
 * @param bool $absolute Return absolute or relative paths? (Default: false)
 * @return mixed
 */
function GetDir($path, $absolute = false)
{
    if ( substr($path, -1, 1) != '/' ) $path .= '/';
 
    $files = array();
    $dir = opendir($path);
 
    if ( $dir === false ) return false;
 
    while ( ( $file = readdir($dir) ) !== false )
    {
        if ( substr($file, 0, 1) != '.' && $file != '..' )
        {
            $files[] = ($absolute === false) ? $file : $path . $file;;
        }
    }
    return $files;
}

Die Funktion stammt aus der functions.php von Yanix und ist daher GPL v2

Im Detail: Der Paramter ist der Pfad $path, welcher ausgelesen werden soll. Wenn der 2. Parameter $absolute auf true steht, gibt die Funktion absolute Pfade zurück, ansonsten relative. Es werden keine Unterverzeichnisse untersucht!

Hier ein praktisches Beispiel:

1
2
3
4
5
6
7
8
9
10
$dir = dirname(__FILE__);
 
// Check, ob das Verzeichnis existiert
if ( is_dir($dir) )
{
    foreach ( GetDir($dir) as $file )
    {
        echo "Datei {$file} gefunden!";
    }
}

Im Beispiel von foreach sollte immer ein Check erfolgen, denn falls die Funktion false zurück gibt, falls das Öffnen der Verzeichnisses fehl schlägt (z.B. wenn es nicht existiert), wirft foreach einen Fehler.

2 Kommentare zu 'Helferfunktion: GetDir'

  1. Tblue sagte am 13. Januar 2008 um 17:29 Uhr:

    Ab PHP 5 kann man auch scandir() verwenden.

  2. Michael sagte am 13. Januar 2008 um 18:13 Uhr:

    Scandir nimmt aber . und .. mit ;)
    Alternative wäre glob(), welche aber langsamer ist

Hinterlasse einen Kommentar

Theme von BenediktRB • Powered by Wordpress • Abonniere den RSS Feed