Download nur über PHP Script erlauben

Hallo!

Die Downloads auf meine Website sollen nur aufgerufen werden, wenn der User über meine Download Seite darauf zugreift.

Ich habe zwar schon Lösungsansätze, aber diese funktionieren leider nicht so, wie ich will.

In dem Verzeichnis, in dem die Dateien liegen, wurde eine .htaccess mit folgendem Inhalt erstellt:
Deny from all

Leite ich jetzt per header(); auf den gewünschten Download, bekomme ich (natürlich) einen Fehler: Access denied.

Ich habe allerdings auch schon eine Lösung gefunden, mit der ich trotzdem auf die Datei zugreifen kann:

header(„Content-disposition: attachment; filename=“.$file->filename);
header(„Content-type: audio/mpeg“);
$hdl = fopen($file->path.$file->filename, „rb“);
fpassthru($hdl);

Das Problem hier ist nur, dass mir Opera eine .htm Datei schickt.
Es ist zwar die korrekte Datei - nur hat sie halt eine falsche Endung.

Wer kann hier helfen?

Danke und Gruß
Christoph

Hi,
warum legst du deine Dateien nicht ausserhalb des Document-Roots?

Gruss
Joey

Das tun sie schon.

Hallo,

In dem Verzeichnis, in dem die Dateien liegen, wurde eine
.htaccess mit folgendem Inhalt erstellt:
Deny from all

Leite ich jetzt per header(); auf den gewünschten
Download, bekomme ich (natürlich) einen Fehler: Access denied.

Warum machst Du es nicht so

RewriteEngine on
RewriteCond %{HTTP\_REFERER} !^$
RewriteCond %{HTTP\_REFERER} !^http://(www\.)?deinedomain.tld/.\*$ [NC]
RewriteRule \.(jpg|gif|png|m4a|mpeg|mp3)$ - [F]

Dann solltest Du mit header() weiterleiten können.

Gruß, Stephan

dann verstehe ich dein Problem nicht.
Dann sind die Dokumente via HTTP doch nicht mehr erreichbar …

dann verstehe ich dein Problem nicht.
Dann sind die Dokumente via HTTP doch nicht mehr erreichbar

seh ich auch so und wenn sie woanders liegen macht man z.b.

if ($fd = fopen ($fullPath, „r“)) {
$fsize = filesize($fullPath);
$path_parts = pathinfo($fullPath);

header(„Content-type: application/octet-stream“);
header(„Content-Disposition: filename=“".$path_parts"basename"].""");

header(„Content-length: $fsize“);
header(„Cache-control: private“); //use this to open files directly
while(!feof($fd)) {
$buffer = fread($fd, 2048);
echo $buffer;
}
}
fclose ($fd);