Guten Abend liebe Forumsgemeinde,
vor einiger Zeit fragte ich hier im Forum nach Hilfe bezüglich der Realisierung eines Dateidownloads in Form von *.zip Dateien. Da die Lösung des damaligen Problems allerdings mit dem IE nicht recht funktionieren wollte bin ich nun nach einer besseren Methode auf die Suche gegangen und wurde auch fündig.
Der Dateidownload wird über eine download.php relisiert, der beim Anklicken einer Datei deren absoluter Pfad bezogen auf die Index.php mit gegeben wird, z.B. so:
Das Ganze wertet die download.php so aus: $filename = $_GET['file'];
Da es nun leider nicht nur liebe gute Menschen im www gibt, birgt dies natuerlich das Risiko, über URI-Manipulation Dateien herunterzuladen, die dafür gar nicht bestimmt sind.
Ich habe schon hin und her überlegt wie ich von mir aus andere Parameter mitgeben kann, welche ich erst durch das Script wieder in absolute Pfade konvertieren könnte die dann meinetwegen gegen ein array geprüft werden um zu sehen ob der DL okay geht.
Das Problem dabei ist, dass verschiedene Dateien in verschieden vielen Unterordnern liegen können und da stoße ich an meine Grenzen.
bisherige Ideen: glob(); Parameter wie z.B. obersten Ordner, unterordner und dateinamen mitgeben und auswerten. Leider bisher alles ohne Erfolg. =/
Kann mir jemand bei diesem Problem eventuell behilflich sein? Ich wäre sehr dankbar dafür.
Ja, Arrays wären da wohl gut geeignet. Du gibst der Url einfach irgendeine Bezeichnung für den Download mit und in der download.php [dort wird in einem Arra der absolute Pfad notiert] überprüfst du dann, ob das vorhanden ist.
Also zum Beispiel die url: bla.com/download.php?download=diesesbild
Vielen Dank für deine Antwort und diesen Denkanstoß, mir kam da gerade eine Idee …
Wie wäre es mit einer Funktion, die den Inhalt eines Ordners ausließt und dessen Inhalt in ein assoziatives array à la Dateiname => Speicherort abspeichert? Dann koennte ich im Downloadscript nach dem, dem Dateinamen zugeordneten, realen Speicherort einer Datei unabhängig vom Verzeichnis suchen lassen und diesen weiterverarbeiten.
Dies ließe sich dann ja relativ einfach gegen ein bestimmtes Muster an Speicherorten prüfen wenn ich diesen aus der download.php mitgegebenen Parametern erst zusammenbauen lasse. Da ich davon ausgehe in Ordnern Oberhalb meines Benutzerordners auf dem Server keine Leserechte zu haben müsste diese Auslese-Funktion ja sowieso mit einem Fehler aussteigen was das Risiko unauthorisierter Downloads minimiert.
Mal sehen, was sich Heute / Morgen noch aus der IDee machen lässt, für Kritik bin ich immer offen.
[code]<?php
function ordnerinhalt($ordner) {
$content = array();
foreach(scandir($ordner) as $file) {
if($file[0] != '.') { // Versteckte Dateien nicht anzeigen
if(is_dir($ordner.'/'.$file)) {
$folderArray[] = $file;
} else {
$fileArray[] = $file;
}
}
}
// Erst die Ordner ausgeben
if(isset($folderArray)) {
foreach($folderArray as $row) {
$content[$row] = ordnerinhalt($ordner.'/'.$row); // rekursiv
}
}
// ...dann die Dateien ausgeben
if(isset($fileArray)) {
foreach($fileArray as $row) {
$content[$row] = $ordner.'/'.$row; //Dateien verlinken
}
}
// Rekursion ende
return $content;
}
$scanning = ordnerinhalt(&ordner);
print_r($scanning);
?>[/code]
Der Code ist ursprünglich nicht von mir, ich habe ihn nur auf mein Problem hin abgewandelt. Die Quelle ist hier.
Allerdings ist mein Problem noch nicht gelöst, er ordnet zwar allen Dateien die in keinem weiteren Unterordner liegen richtig ihren Seicherort zu, jedoch erzeugt er für Unterordner neue Arrays im array, was das Durchsuchen so wie ich es benötige für mich nicht möglich macht. Hat vielleicht jemand einen Verbesserungsvorschlag?
Ich lese ueber ein script den Inhalt von Ordnern aus, welche sich aus parametern der URI zusammen bauen, z.B. “section=Bilder&category=01”, daraus baut er dann den Pfad zusammen der sich hinter Bilder und Category versteckt und listet die Dateien auf die er findet. roblem dabei ist um sie zum download anzubieten wird beim anklicken ein Link auf eine download.php ausgelöst die als parameter “?file=./absoluter/pfad/zur/datei” enthält was wie oben beschrieben nicht gut ist.
Gleiches würde ich mit dem Script was ich gepostet habe versuchen, nur dass ich dort den Dateinamen als Key und als Value dessen absoluten speicherpfad haben will. Das funktioniert auch nur kann ich in dem sich daraus ergebenden multidimensionalen array nicht richtig nach den keys suchen, oder ich stelle mich zu blöde an.
Ich teste deinen code mal
EDIT: Der Vorteil den ich mir vom erneuten Auslesen des bezeigten Ordners verspreche ist der dass ich dann einfach als einen weiteren parameter den Dateinamen mitgebe, und diesen gegen ein Array prüfen lasse was in der download.php mit dem obigen Script erstellt wird. Darin sollen sich als keys die dateinamen befinden und als value deren speicherort.
Beispiel: sagen wir die obigen parameter ergeben den absoluten pfad ./Bilder/04/ … dann will ich alle dateien dort drin auslesen was auch klappt, aber, sobald dieser Ordner einen Unterordner hat ergibt sich folgendes