PHP Downloadskript: Wie Dateien behandeln?



  • Hi!
    Ich arbeite gerade an einem PHP-Skript zum Downloaden von Dateien. Das Skript soll dabei die eigentlichen Pfade auf dem Server verbergen und stattdessen etwas anderes/gar nicht/eig. egal was in der Browserleiste anzeigen.
    Dazu habe ich nun zwei Ideen mit Vor- und Nachteilen:

    1: Alle Daten inklusiven Pfad auf dem Server in einer SQL Datenbank speichern und diese dann entsprechend mit dem Namen der Datei (z.B: per Get oder Post) suchen und per header() senden.
    => relativ zugüg, aber SQL Datenbank braucht immer neues update bei neuer Datei
    2: Ordner jedesmal durchsuchen, sodass keine SQL Datenbank benötigt wird, sonst eig. gleich.
    => keine Datenbank, d.h. auch keine Updates bei neuen Dateien, dafür relativ langsam

    Wenn ihr noch andere Ideen dafür habt immer her damit 😉



  • wenn es dir nur darum geht, die URL vorm User zu verschleiern, dann reicht ModRewrite auch aus

    wobei ich deine Einwände nicht ganz verstehen kann... die Datenbank wird automatisch beim hochladen aktualisiert und seit wann muss man einen Ordner durchsuchen, wenn man den Dateinamen kennt?



  • Hm, darüber habe ich nachgedacht, aber dabei wird ja nicht der tatsächliche Link in der HTML Datei geändert oder? Also ich will ja, dass man unter keinen Umständen wissen soll wo die Datei liegt.
    Das hat (daher geht das auch nur unzureichend mit einer SQL Datenbank die beim Upload aktualisiert wird - hätte ich vielleicht dazusagen sollen) den Hintergrund, dass ein Großteil der Dateien die ich im Internet freigeben möchte auch lokal verfügbar sind. Das heißt, wenn ich hier z.B. an einem Projekt programmiere möchte ich von überall Zugriff auf dieses Projekt haben. Dazu dann immer die SQL Datenbank aktualisieren fänd ich doof und erst ein Skript oder ähnliches zum aktualisieren aufzurufen wäre zwar machbar, aber auch nicht "perfekt".



  • Hallo,

    ich würd den Weg über die Datenbank gehen. Das ist bei vielen Dateien sicherlich effektiver und sorgt vor allem für mehr Ordnung. Du kannst dann jeder Datei eine ID zuweisen und anhand der ID schauen welche Datei gezogen werden soll. Der Aufwand mit der Datenbank lässt sich mit einem kleinen Upload-Script extrem veringern.

    LG, Micha



  • Hm ja beim so drüber Nachdenken ist das wohl die bessere Entscheidung, zumal User sich einloggen sollen um zu downloaden.
    Hierbei bin ich mir nun bei der Umsetzung nicht ganz schlüssig:
    Wenn ich den Daten eine feste ID zuordne kann man diese, sofern man die ID auswendig kennt direkt downloaden, andererseits sind temporäre ID's etwas sicherer. Nun bin ich mir nicht sicher was davon intelligenter wäre 🙂
    Also:
    Pro für feste ID's: -wenig Rechenlast, User muss sich eh einloggen, man kann Dateien direkt auswählen
    Pro für temporäre ID's: -User kann nur wenig Rückschlüsse auf den Serveraufbau nehmen, ich muss die Dateien nicht sortieren (also welche ID = 1, ID = 2 usw.)



  • Du kannst es doch so einrichten, dass die ID alleine nicht ausreicht, um die Datei zu downloaden, sondern man eben eingeloggt sein muss. Kannst Du ja kontrollieren, ob ein bestimmtes Cookie gesetzt ist, oder beim Downloadlink übergebene Session-ID noch gültig ist?!


  • Mod

    Warum willst du den pfad zur Datei denn verstecken?



  • WO liegt das Problem. Sende sie doch mit Header.



  • Also Wege wie man das implementieren kann wurden ja schon zu Hauf jetzt genannt und da sehe ich auch weniger das Problem, sondern eher was sinnvoller/besser ist.
    Warum ich die verstecken will: Wie gesagt,die Daten gehören auch zum lokalen Server und ich möchte schlichtweg nicht, dass jeder sieht wo was auf meinen Festplatten liegt usw.
    Zur Verdeutlichung nochmal ein Beispiel:
    Datei1 hat immer die ID = 11111, sodass www.meinserver.de/download.php?id?11111
    Bei einer temporären ID (z.B. aus Session_ID gebaut) sieht das dann beim ersten Mal vllt. so aus: www.meinserver.de/download.php?id?11111 und beim Zweiten Mal so:
    www.meinserver.de/download.php?id?22222 für ein und dieselbe Datei


  • Mod

    Wie genau wählt man denn die Datei aus die man runterladen will? Da muss ich mich doch eh durch Ordner navigieren, oder?



  • Bei temporären IDs?
    Jeder User bekommt eine ID zugewiesen und jede Datei hat eine feste ID. Daraus könnte ich z.B. eine neue ID bauen, die per GET oder so übertragen und am Ende wieder auseinander nehmen. Muss nur der entsprechende Algo da sein.
    Aber da gibts bestimmt elegantere Lösungen für - die kam mir spontan, aber so dolle finde ich die nun nicht.
    Ich tendiere gerade eher zur festen ID, nur da wüsste ich nicht wie ich sortieren soll 😃

    Edit: Wie läuft das denn auf so größeren Seiten wie z.B. Chip ab? Da habe ich z.B. als Downloadlink sowas: http://dl23.chip.de/download/cbcbb7464e9c973bce281aa41ce44b79/49c127bf/3803430/NameDerDatei



  • Pille456 schrieb:

    wie läuft das denn auf so größeren Seiten wie z.B. Chip ab? Da habe ich z.B. als Downloadlink sowas: http://dl23.chip.de/download/cbcbb7464e9c973bce281aa41ce44b79/49c127bf/3803430/NameDerDatei

    wie genau das da gemacht wird, kann ich nicht sagen, aber wenn man wirklich Sicherheit will, kann man auc "Tickets" verteilen:
    Bei der Downloadanfrage wird die eigentliche Datei-Id zusammen mit einer gerade zufällig erstellten (oder zumindest einmaligen) Id, der User-Id und einem Zeitstempel in der Datenbank abgelegt. Das Skript, dass die Datei dann rausschickt löscht erstmal alle alten Tickets aus der DB und sieht dann nach, ob die übermittelte ID noch drinsteht. Wenn ja, kann sie anhand der Datei-Id die Datei rausschicken. Wenn nicht, dann gibts eben eine Fehlermeldung.


  • Mod

    Pille456 schrieb:

    Bei temporären IDs?

    Nein, vom user interface her.
    Ich komme auf deine Seite und wo klicke ich dann um eine datei runter zuladen.

    mich würde nämlich interessieren wie du hier die ordner struktur verstecken willst.


Anmelden zum Antworten