Moin,
Ich glaube, ich habs mittlerweile kapiert, warum das erstmal nicht gehen kann.
gut, so langsam fügt sich also das Puzzle zusammen.
»» Deswegen hatte ich ja schon gesagt, dass du ein Download-Script schreiben musst, das die Dateien aus diesem Verzeichnis rausklaubt,...
Wie würde das dann ungefähr aussehen, bzw. wie spreche ich die Dateien an, anstatt sie über<a href="dataintern/test.zip">Test</a>
zu verlinken?
Du erstellst ein weiteres PHP-Script mit dem gleichen Login-Mechanismus wie die bisherigen. Als "Nutzcode" enthält es nur wenige Zeilen:
$allowed = array("test.zip", "data.zip", "readme.txt"); // erlaubte Dateien für Download
if (isset($_GET['file'])) // wurde ein file-Parameter übergeben?
{ if (in_array($_GET['file'], $allowed)) // ist die Datei zum Download freigegeben?
{ header("Content-Type: application/octet-stream"); // geeigneten HTTP-Header setzen
readfile("dataintern/" . $_GET['file']); // Datei durchreichen
}
else // ungültiger Parameter
{ echo "Fehler: Zugriff auf angegebene Datei nicht erlaubt.\n";
}
else // gar kein file-Parameter
{ echo "Fehler: Kein Dateiname angegeben.\n";
}
Und statt mit http://example.org/dataintern/test.zip referenzierst du die Datei nun mit http://example.org/download.php?file=test.zip, sonst ändert sich "von außen" nichts.
Wichtig ist hier vor allem zu verhindern, dass jemand durch "geschickte" Pfadangaben im file-Parameter Daten ausspionieren kann, die er nicht haben darf. Das verhindere ich, indem ich den Parameter gegen ein Array von erlaubten Werten prüfe und alle anderen Versuche als ungültig abweise.
Wichtig ist außerdem, dass das Script im Erfolgsfall vor diesen paar Zeilen keine Ausgabe an den Browser senden darf, weil sonst die header()-Anweisung ihre Aufgabe nicht mehr erledigen kann. Aber das ist ja bekannt ... ;-)
Und ist diese Methode dann nicht auch von anderen möglich?
Wie meinst du das?
So long,
Martin
Küssen ist die schönste Methode, eine Frau zum Schweigen zu bringen.