SPL: DirectoryIterator und SplFileInfo

Heute geht es um die Standard PHP Library, kurz SPL. Oder genauer gesagt, um die Klassen DirectoryIterator und SplFileInfo. Vorab aber erstmal ein paar Infos zur SPL.

Die SPL ist eine Art Framework für PHP. Es besteht aber noch ein großer Unterschied zu normalen Frameworks, wie das Zend Framework, CodeInteger und Co, denn die SPL liegt in kompilierter Form vor. Das macht die Bibliothek nicht nur schneller, sondern bietet auch viel mehr Möglichkeiten. Die SPL ist nämlich genau wie die Sprache PHP selbst in C geschrieben. So kann man zum Beispiel mit SPL-Interfaces den eigenen Klassen ganz neue Funktionalitäten hinzufügen, die man mit Standard-Funktionen gar nicht erreichen kann. Über die SPL-Interfaces werde ich demnächst auch nochmal berichten – ist nämlich auch ein ziemlich interessantes Thema. Jetzt aber zum DirectoryIterator und der SplFileInfo.

Wenn man mit PHP Standard-Mitteln ein Verzeichnis ausgeben wollte, würde das ungefähr so aussehen:

function showDirectoryListing($path)
{
    $basename = basename($path);
    $handle = opendir($path);
    echo '<ul>';
    while($file = readdir($handle))
    {
        if($file != '.' && $file != '..')
        {
            if(is_dir($basename.$file))
            {
                echo '<li class="directory">'.$file.'</li>';
            }
            else
            {
                echo '<li class="file">'.$file.'</li>';
            }
        }
    }
    closedir($handle);
    echo '</ul>';
}

Besonders schön ist diese Lösung nicht, aber jetzt kommt die Klasse DirectoyIterator ins Spiel. Mit dieser Klassen können wir Verzeichnisse viel komfortabler Auslesen, denn wir bekommen jeden Eintrag als Objekt der Klasse SplFileInfo zur weiteren Verarbeitung zurückgeliefert. Die SplFileInfo-Klasse stellt viele Methoden zur Verfügung, um Dateien und Verzeichnisse besser bearbeiten zu können. Hier nochmal die Überarbeitete Fassung der obigen Funktion:

function showDirectoryListing($path)
{
    echo '<ul>';
    $handle = new DirectoryIterator($path);
    foreach($handle as $file)
    {
        if(!$file->isDot())
        {
            if($file->isDir())
            {
                echo '<li class="directory">'.$file->getFilename().'</li>';
            }
            else
            {
                echo '<li class="file">'.$file->getFilename().'</li>';
            }
        }
    }
    echo '</ul>';
}

Diese Variante sieht doch schon um einiges sauberer aus. Einen richtigen Unterschied wird man aber erst dann richtig bemerken, wenn man noch mehr mit den Dateien arbeiten muss (z.B. wenn es darum geht noch weitere Informationen zu den Dateien auszugeben).

Insgesamt helfen diese zwei Klassen also, den Code sauberer und komfortabler zu gestalten. Außerdem wird dadurch endlich der Zugriff auf Verzeichnisse und Dateien mit einer performanten Lösung standardisiert. Wenn ihr also das nächste Mal auf ein Verzeichnis zugreifen müsst, solltet ihr diesen Weg nutzen.

Und noch ein kleiner Tipp: SPL-Klassen lassen sich ohne Weiteres erweitern und so könnt ihr problemlos eine eigene, verbesserte FileInfo-Klasse schreiben (falls ihr so was braucht).

MySQL GUI Tools

Heute möchte ich mal ein kostenloses, aber sehr mächtiges Tool vorstellen, das ich zwar schon etwas länger kenne, aber noch nie wirklich benutzt habe. Es geht um die MySQL GUI Tools, die aus insgesamt 3 Programmen besteht. So lassen sich alle MySQL-Server komplett mit grafischer Oberfläche administrieren, ohne dabei auf die Kommandozeilenebene zugreifen zu müssen.
Jetzt gehen wir aber erstmal kurz die drei Tools durch. Noch ein Hinweis: Die Tools können bestimmt noch mehr als das, was ich hier beschreibe, aber ich konnte mich auch noch nicht mit allen Funktionen vertraut machen. Probiert sie einfach mal selbst aus. Ihr könnt mir danach gerne berichten.

MySQL Administrator

Mit diesem Tool lassen sich Basis-Einstellungen an einem MySQL-Server vornehmen. Es gibt eine Benutzerverwaltung sowie Backup-Funktionen für einzelne Datenbanken.

MySQL Migration Toolkit

Wegen dieses Features bin ich auf die MySQL GUI Tools überhaupt erst gestoßen. Das Programm konvertiert nicht nur die gängigsten Datenbankformate in MySQL, sondern kann auch ganze Datenbanken zwischen verschiedenen Server austauschen. Man muss also kein SQL-Dump mehr erstellen, sondern es geht alles automatisch von statten.
Dazu kommen die Konvertierungs-Funktionen. So lässt sich zum Beispiel bequem von Oracle nach MySQL, MS SQL nach MySQL oder Sybase nach MySQL konvertieren. Und selbst bei großen Datenmengen geht es relativ schnell.

MySQL Query Browser

Jeder, der sich schonmal mit phpMyAdmin rumgeärgert hat, wird mit diesem Tool seine Freude haben. Der Query Browser besitzt viele Funktionen von phpMyAdmin, dafür aber in der gewohnten Windows-Oberfläche und ganz ohne Browser. Für Server ohne PHP also genau das richtige.

Im Grunde umfasst das Paket alles, was man zur Verwaltung von MySQL braucht, ist aber komplett kostenlos und offiziell auf mysql.com downloadbar. Für PHP-Entwickler dürfte zwar nur das Migration Toolkit interessant sein (phpMyAdmin kann noch ein bisschen mehr als die anderen beiden Tools), trotzdem sollte man es sich mal ansehen.
Ich frage mich sowieso, warum dieses Paket noch nicht so weit verbreitet ist…