phpBuddy

Script Downloads

  • Professionelles Gästebuch mit Admin Panel und Spam Schutz
  • Image Hosting Script mit Thumbnail-Funktion und Passwortschutz
  • File Send Script Privates File Sharing Script mit Email-Benachrichtigung
Sie sind hier: Startseite Dateien als Linkliste
Dateien eines Verzeichnis als Linkliste ausgeben

Dateien eines Verzeichnis als Linkliste ausgeben

Letztens erreichte mich via Wunschkasten die Frage, wie man alle Dateien eines Verzeichnisses als Linkliste ausgeben kann, wenn seitens des Provider das Directory Listing deaktiviert wurde und es sich auch per .htaccess nicht anschalten läßt. Mit PHP ist es kein Problem, alle Links in hübscher, tabellarischer Form auszugeben.

Voraussetzung für die hier gezeigten Methode ist PHP 5.0.0 oder höher, sowie Zugriff auf die PHP 5 interne Klasse DirectoryIterator. (Letzteres ist normalerweise standardmäßig aktiv)


Das Script zum auslesen mit DirectoryIterator

Wie wir gleich sehen werden ist es mit den neuen PHP 5 Boardmitteln sehr einfach unser Vorhaben umzusetzen. Mit nur wenigen Zeilen Code lesen wir die Dateien in einem Verzeichnis aus, verlinken diese und ermitteln neben Dateigröße auch noch wann die Datei das letzte Mal aktualisiert wurde. Diese Informationen sind z.B. für Downloadbereiche interessant. Hier nun das Script:

<?php
// Verzeichnis mit den Dateien
$verzeichnis = 'dateien/';
 
// Tabellenkopf
echo <<<TABLEHEAD
<table border="1" cellpadding="2" cellspacing="3">
    <tr>
    <th>Dateiname</th>
    <th>Dateigröße</th>
    <th>aktualisiert</th>
    </tr>
TABLEHEAD;
 
// Verzeichnis auslesen und Dateien ausgeben
foreach (new DirectoryIterator( $verzeichnis ) as $datei)
{
    if (!$datei->isDir() && !$datei->isDot())
    {
        echo '<tr>';
        echo '<td><a href="' .$verzeichnis.$datei->getFilename(). '">' .$datei->getFilename(). '</a></td>';
        echo '<td>' .ceil( $datei->getSize()/1024 ). ' KB</td>';
        echo '<td>' .date( 'd.m.Y', $datei->getMTime() ). '</td>';
        echo "</tr>\n";
    }
}
 
// Tabelle schließen
echo '</table>';
?>

Gehen wir ganz kurz das Script durch, dass sehr einfach zu verstehen sein sollte.
Zunächst legen wir in $verzeichnis fest, welches Verzeichnis wir auslesen möchten. Anschließend geben wir den Tabellenkopf aus, damit unsere Liste auch in einer sauberen, tabellarischen Form ausgegeben werden kann. Hierbei benutze ich die weniger verbreitete Heredoc Schreibweise. In der foreach() wird mit der Klasse DirectoryIterator das Verzeichnis ausgelesen. Da der Rückgabewert ein Array ist, können wir das direkt in der Schleife tun, um Datei für Datei zu verarbeiten. Weil die DirectoryIterator Klasse speziell auf die Bedürfnisse zugeschnitten ist, die man im Umgang mit Verzeichnissen braucht, stellt diese Klasse alles als Methoden zur Verfügung. Ganz gleich ob man den Pfad, Dateiname, Dateigröße, letzte Aktualisierung, usw. benötigt, für alles steht eine eigene Methode bereit. Eine detaillierte Erklärung der Methoden spare ich mir an dieser Stelle, da dies bereits als Teil des SPL Tutorials geschehen ist.
Weitere Funktionen die hier benutze wurden sind ceil, womit man numerische Werte aufrundet und date. Die DirectoryIterator Methode getMTime() liefert einen Timestamp zurück, den wir an date übergeben, um diesen Zeitstempel in ein lesbares Datumsformat umzuwandeln. Das Resultat sieht in etwa aus wie auf diesem Screenshot:

Screenshot Dateiliste


Fazit

Wie wir gesehen haben ist es mit wenigen Zeilen Code möglich ein Mini-Downloadbereich zu realisieren. Möchte man nur bestimmte Dateien zum Download anbieten und andere Dateitypen ausfiltern, sollte man sich mit der FilterIterator Klasse beschäftigen. Wer mehr über die DirectoryIterator und FilterIterator Klassen erfahren möchte, dem sei das Tutorial Einführung in die SPL ans's Herz gelegt.

Viel Spaß mit dem Script! :-)