Fortgeschrittene - Freitag, Februar 22, 2008 16:14

Datei Browser mit PHP

Interessante Anwendungsmöglichkeiten bestehen für einen Datei-Browser in php. Beispielsweise können Ihre Besucher auf diese Weise komfortabel in kategorisierten Downloads, oder anderen Archiven stöbern. In diesem Beispiel wollen wir einen Datei-Browser erstellen, um bequem durch eine Sammlung von .xml und Bilddateien zu navigieren. Hierbei ist insbesondere zu beachten, das der Besucher keinen Zugriff auf Systemdateien, ausführbare Dateien (zum Beispiel .php Skripte) oder Verzeichnisse außerhalb des vorgegebenen Verzeichnisbaums erlangt. Das unterste zu zeigende Verzeichnis, das so genannte Root - Verzeichnis, wird durch den Speicherort der späteren .php Datei bestimmt, die den Dateibrowser enthält.

Dazu erstellen wir eine Datei namens dateibrowser.php mit folgendem Inhalt.

<?php
    
// Pfadangabe gegen externe Eingaben sichern
    
$pfad str_replace(“../”“”$_GET[‘pfad’]);
    
    
// Wenn kein Pfad übermittelt, root anzeigen
    
if($_GET[‘pfad’] == “”
        
$pfad = ;
    else
        
$pfad $_GET[‘pfad’];
    
    
// letzte Ebene entfernen
    
$ebene_hoch substr($pfad0strrpos($pfad“/”));
    
    
// aktuellen Pfad festlegen
    
$ordnerpfad $pfad.$ordner;
?>

In der Variable $pfad soll sich der aktuelle Pfad vom Verzeichnis in dem die Datei dateibrowser.php liegt bis zum aktuellen Verzeichnis befinden. Um diese Variable gegen fremde Eingaben zu sichern, durch die möglicherweise ein zugriff auf tiefer liegende Verzeichnisse auf dem Server möglich wäre werden relative Pfade, die nicht oberhalb des Root - Verzeichnisses des Scripts liegen abgefangen. Ist kein Pfad angegeben, wird das Root - Verzeichnis des Scripts ausgelesen. Für die Navigation zwischen den einzelnen Verzeichnissen wird nur der Pfad zur nächsten tieferen Ebene, sowie der Pfad des aktuellen Ordners festgelegt.

<?php 
// Ordnerinhalt einlesen
$handle opendir($ordnerpfad);
// Inhalt einzeln abarbeiten 
while ($ordner readdir ($handle))
{
    
// Link Pfad zum nächsten Ordner erstellen
    
$neuerpfad $pfad.‘/’.$ordner;
    
    
// Wenn es sich um einen Ordner handelt
    
if(is_dir($neuerpfad))
    {
        if(
$ordner != “.” && $ordner != “..”)
         {
             
// Ordner mit einem icon versehen un der Ordnerliste hinzufügen
             
$ordnerliste .= ‘Ordner: <a href=”dateibrowser.php?pfad=’.$neuerpfad.‘”><b>’.$ordner.‘</b></a><br />’;
         }
    }
?>

Im nächsten Teil der Datei wird der komplette Inhalt des Verzeichnisses ausgelesen, auf das die Variable $pfad verweist. Dies geschieht mit der Funktion opendir(). Im Anschluss daran durchlaufen alle gefundenen Dateien und Ordner eine while - Schleife, in der zunächst geprüft wird, ob es sich um einen Ordner oder eine Datei handelt. Lässt die Prüfung mittels der Funktion is_dir() darauf schließen, das es sich um einen Ordner handelt wird ein entsprechender Link zu diesem Ordner erstellt und der Variable $ordnerliste angehängt.

<?php
    
// Wenn es sich nicht um einen Ordner handelt
    
else
    {
        
// Wenn es sich um eine Bilddatei handelt…
        
if(substr($ordnerstrrpos($ordner“.”)) == “.jpg” or 
           
substr($ordnerstrrpos($ordner“.”)) == “.jpeg” or 
           
substr($ordnerstrrpos($ordner“.”)) == “.gif” or 
           
substr($ordnerstrrpos($ordner“.”)) == “.png”)
        {
            
// …wird der entsprechende Link erstellt
            
$images .= ‘BILD: <a href=”‘.$pfad.‘/’.$ordner.‘”>’.$ordner.‘</a><br />’;
        }
    
        
// Wenn es sich um eine .xml Datei handelt…
        
elseif(substr($ordnerstrrpos($ordner“.”)) == “.xml”)
        {
            
// …wird der entsprechende Link erstellt
            
$xmls .= ‘XML: <a href=”‘.$pfad.‘/’.$ordner.‘”>’.$ordner.‘</a><br />’;
        }
        
// Alle anderen Dateien werden nicht angezeigt.
    
}
// Ende der While Schleife
?>

Handelt es sich nicht um einen Ordner prüfen wir in unserem Beispiel, um was für einen Dateityp es sich handelt. Wie schon geschildert wollen wir ausschließlich Bilddateien der Formate .jpg, .gif und .png, sowie .xml Dateien anzeigen lassen. Anhand der Dateiendung, die wir ermitteln indem wir alle Zeichen im Dateinamen ab dem letzen vorkommenden Punkt ausgeben lassen ( substr($ordner, strrpos($ordner, “.”) ), prüfen wir nun, um welche Dateiendung es sich handelt und vergleichen diesen mit den vorgegebenen Dateiendungen der Dateitype, die wir ausgeben lassen wollen. Anschließend wird ein Link zu der entsprechenden Datei erstellt und dieser der Liste der Dateien dieses Typs angehängt.

Durch eine Erweiterung der Abfrage der Dateitypen könnten natürlich alle beliebigen Dateitypen in einer eigenen Liste ausgegeben werden.

Selbstverständlich könnte man zur optischen Optimierung dem Link ein entsprechendes Icons des Dateityps voranstellen sowie die Listen und die Navigation mittels CSS formatieren.

<?php 
    
// Ausgabe der Navigation
echo ‘<div>aktueller Pfad: ’.$ordnerpfad.‘</div>
      <a href=”dateibrowser.php?pfad=.”><b>-> zum Startverzeichnis</b></a><br />
      <a href=”dateibrowser.php?pfad=..”><b>–> ein Verzeichnis nach oben wechseln</b></a><br /><br />’
;

// Ausgabe der Listen
echo ‘<div><b>Ordner</b></div>’.$ordnerliste.‘<br />
      <div><b>XML-Dateien</b></div>’
.$xmls.‘<br />
      <div><b>Bild-Dateien</b></div>’
.$images.‘<br />’;
?>

Zum Schluss werden noch die Navigation zwischen den einzelnen Ordnern sowie die Datei- und Ordnerlisten ausgegeben. Dies geschieht im Beispiel geordnet nach Dateitypen. Durch eine andere Systematik beim hinzufügen der Links zu den jeweiligen Listen ist aber auch eine beliebige andere Ausgabe denkbar.



1 Kommentar
RSS Feed der Kommentare | Kommentieren | Trackback

christian
Mai 27, 2008 17:20

Hallo

Kann man mit diesem Skript auch Verzeichnisse auf den Servern von z.B. 1und1 anzeigen lassen. Aus Sicherheitsgründen sind dort ja meist die Indexoptionen deaktiviert.

Danke für ne Antwort
Gruß

Kommentieren

wichtige Artikel