Ich habe mir mal eine Lösung ausgedacht. Anstelle einer weiteren Datei rufe ich einfach die gleiche Datei nochmals auf und übergebe ihr die Daten mittels GET. Da die Datei vom System aus geschützt ist, kann man durch Aufrufen des Direktlinks ohne Login keine Dateien herunterladen.
Allerdings läuft es noch nicht wie gedacht. Mein Script findet zwar die Dateien, aber der Befehls "readfile" übergeht seinen Parameter einfach und gibt nicht die Datei, sondern eine Ladung Seitenquelltext aus. Der Seitenquelltext ist immer so lange, wie die Datei, die ich eingentlich herunterladen möchte. Wenn ich z. B. eine Textdatei mit dem Inhalt "Hallo" herunterladen möchte, dann bekomme ich eine Textdatei mit den ersten 5 zeichen des Quelltextes.
Was läuft da schief? Mein Quelltext beginnt folgendermassen:
Code:
<?php
if (!empty($_GET['dl'])) {
$dl = $_GET['dl'];
} else {
$dl = 0;
}
if ($dl == 1) {
$datei = $_GET['datei'];
$pfad = $_GET['pfad'];
$dokument = 'meinpfad/' . $pfad.$datei;
header("Content-Type: x-type/subtype");
header("Content-Length: ".filesize($dokument));
header("Content-Disposition: attachment; filename=".$datei);
readfile($dokument);
}
//weiter unten werden die Dateien in allen Unterordnern
//mit readdir herausgesucht und aufgelistet
Der Untere Teil des Quelltextes läuft problemlos. Am Pfad kann es nicht liegen. Wenn ich den Pfad abändere bekomme ich eine Fehlermeldung. Und diese komische Eigenart, dass die Länge des ausgegebenen Quelltextes gleich der Länge der abgerufenen Datei ist bedeutet, dass der Pfad stimmen muss.
Der Fehler steckt irgendwo beim Befehl "readfile()". Ich kann den Parameter von readfile beliebig ändern. Das Script arbeitet immer genau gleich. readfile() reagiert also überhaupt nicht auf den Parameter "$dokument". Ich kann mir nur nicht erklären wieso.