IFM: improved file manager

Seit einigen Tagen habe ich an einem neuen Dateimanager für meinen Webspace gearbeitet, und jetzt steht die erste Alpha-Version, die erst noch umfangreich getestet werden muss, aber schon recht ordentlich läuft, zur Verfügung (https://github.com/misterunknown/ifm). Er basiert auf meinem EPFM (Easy PHP File Manager), ist aber etwas größer und funktioniert wie ein Client-Server-System, wobei es dennoch eine single-file-Lösung geblieben ist.
Beim Aufrufen des Skripts wird ein dynamisches Interface gesendet, welches mit HTML5, CSS3 und Javascript umgesetzt ist; im Hintergrund arbeitet das Skript mit einem PHP-API, welches mit dem Interface über JSON kommuniziert. Damit minimiert man den Traffic den das Skript generiert, da im Gegensatz zum EPFM nicht jedes mal das ganze Markup mitgesendet wird, sondern nur relevante Teile per AJAX geladen werden. Das verwendete jQuery ist im Skript integriert, was die etwas üppigere Dateigröße ausmacht.

Bekannte Funktionen, wie editieren, umbenennen und löschen von Dateien und Ordnern sind genauso vorhanden, wie die Zip’n’load-Funktion für Verzeichnisse und auch der Button zum Entpacken von Zip-Archiven fehlt natürlich nicht. Es ist aber auch eine Funktion zum Verschieben bzw. Kopieren von Dateien vorgesehen, welche durch die Nutzung von Javascript und AJAX viel einfacher umgesetzt werden kann und wird. Auch ein Markieren mehrerer Dateien ist zukünftig vorgesehen und erleichtert somit die Arbeit eines Webadministrators. Weiterhin wird es auch noch andere Icons geben, da noch nicht alle dem neuen Design angepasst sind.

Wichtig sind außerdem die Systemvorraussetzungen: Serverseitig sollte mindestens PHP 5.4 installiert sein. Clientseitig wird ein Browser benötigt, der HTML5, CSS3 und Javascript unterstützt. Außerdem muss der Browser XMLHttpRequests Level 2 für das asychrone Hochladen von Dateien unterstützen. Diese Voraussetzungen erfüllen die meisten aktuellen Browser: Chrome 30, Firefox 25, und der Internet Explorer 10. Der IE9 unterstützt leider den Dateiupload noch nicht, alle anderen Features sollten aber auch dort funktionieren.

Eine besondere Funktion ist das asynchrone Hochladen von Dateien, welches zum Zeitpunkt des Uploads die Benutzung des Skripts nicht verhindert, sondern im „Hintergrund“ läuft. Ein entsprechender Hinweis findet sich in der unteren rechten Ecke des Viewports. Auch der Upload von mehreren Dateien gleichzeitig ist möglich. Dabei sollte unbedingt die Konfiguration des Webservers bezüglich der maximalen Dateigröße von Uploads und der maximal möglichen Speicherbelastung von PHP-Skripten beachtet werden, andernfalls kann es zu Fehlern kommen.

Die Konfiguration ist äquivalent zum EPFM, auch wenn einige Einstellungsmöglichkeiten fehlen. So sind die Icons mittlerweile nicht nur direkt im Skript verankert (base64), sondern können auch nicht von externen Quellen nachgeladen werden. Das ist aber kein Problem, da sie nicht immer mit geladen werden müssen, sondern beim ersten Aufrufen mit ausgeliefert werden. Außerdem greift die Option „replaceSpecialCharacters“ noch nicht.

Die Konfiguration findet sich sowohl im PHP-API-Teil des Skripts, als auch im Javascript wieder. So ist selbstverändlich gewährleistet, dass man auch bei manipulierten POST-Anfragen nicht über die eingestellten Kompetenzen des Skripts hinaus gegangen werden kann. Trotzdem gibt es natürlich keine Garantie: Wer Sicherheitslücken oder Bugs entdeckt, darf sie mir gerne mitteilen.

Das Design hat übrigens ein Kollege gemacht, da ich in solchen Dingen, wie man am EPFM sehen kann, nicht so derartig bewandert bin.

Wer Anregungen, Hinweise oder sonstige Statements hat, kann diese gern in den Kommentaren hinterlassen oder mir eine Email schicken.

5 Gedanken zu „IFM: improved file manager“

  1. Hi,
    das Skript verlangt, dass es im Wurzelverzeichnis der Teilbaumes der Verzeichnisstruktur liegt, durch die man navigieren möchte.
    Bspw: /dokumente/ifm.php
    wenn ich in „/dokumente“ damit arbeiten möchte.

    Es wäre, so finde ich, schön, wenn es auch an einem anderen Ort liegen könnte und man diese Wurzelverzeichnis durch eine Einstellung festlegen könnte.

    1. Hallo Jörg,

      danke für dein Feedback! Ich werde diese Funktion auf die Todo-Liste setzen. Ich implementiere im Monat immer so 2-3 Features; deins steht jetzt auf Platz 2 (davor steht nur noch Kopieren/Verschieben).
      Wenn die neuen Funktionen eingebaut sind, werde ich hier natürlich darüber informieren; auf dem allerneusten Stand bist du aber nur, wenn du das Github-Repository verfolgst 😉

      Grüße, Marco

      1. Hallo Jörg,

        leider gestaltet sich die Umstellung auf ein userdefiniertes Wurzelverzeichnis schwieriger als gedacht, vor allem in Verbindung mit dem neuen Verschieben/Kopieren-Feature. Ich wollte nur sagen: Ich bin dran 😉

        Grüße, Marco

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.