• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

direkten Download verhindern

Doopanga

Neues Mitglied
Hallo freunde

Ich habe eine php seite mit login. Es gibt nur einen Benutzer und ein Passwort für diese Seite. Derjenige, der auf die Seite will, wird mit einem automatischem link auf die Seite geschickt und automatisch angemeldet. (Apache Server)
Auf dem Server gibt es Dateien, die der eingeloggte user herunterladen darf, der Rest der Welt aber bitte nicht.

Wie kann ich die Dateien sperren? mit .htaccess?
oder mit httpd.config?

danke für eure Hilfe im Vorraus!
 
Werbung:
Mit beidem, denn httpd.conf und .htaccess leisten beide das gleiche, auch wenn in .htaccess nicht alles erlaubt ist.

Pack die Dateien in einen Ordner und schreib in die .htaccess dort:
Code:
deny from username
 
Danke für die schnelle Antwort.
Werde erst Mittwoch wieder daran arbeiten können.

Habe auch noch eine Verständnisfrage dazu:
Wenn ihc das was du angegeben hast, in die htaccess gebe, woher weiß es dann welcher benutzer zugelassen ist?
ich hab ne check.php und alles weitere liegt unterhalb in Ordnern.
 
Werbung:
google mal nach htpasswd, die alternative ist die datei durhc php zu schleifen -> php.net/readfile
 
Hi
Also die o.g. Methoden haben nicht zum Erfolg geführt....

deny from username ist nicht das gesuchte, da ich ja nicht will, das jemand sich bei einem dateiupload nochmal anmelden muss. (htpasswd)

Das mit dem readfile habe ich nicht ganz verstanden...worauf bezieht sich das? Wie funktioniert das genau? Hab keine Seite gefunden die das einigermaßen verständlich erklärt...^^
 
Pack die zu sperrenden Dateien in ein Verzeichnis und leite dort jeden Aufruf auf die Startseite weiter.

Code:
RewriteEngine On
RewriteRule (.*) /index.html

Um die so gesperrten Dateien doch noch zum Download zur Verfügung zu stellen, benutze PHP oder eine andere Webprogrammiersprache die die Dateien zum Besucher streamen. Siehe:
PHP: readfile - Manual
PHP: header - Manual
 
Werbung:
Ja super!
.htacces auf /index.html funktioniert wie es soll :)
Aber wie du gesagt hast, leitet er natürlich alle Anfragen um^^

Die header-Funktion ist wirklich kompliziert... Und die Anleitung in php.net ist nicht wirklich verständlich. Google hilft da auch nicht weiter. ich weiß garnicht wo die Codes hinkommen. haeder kommt am Anfang des codes.....

Ich bin so weit, das der die Datei zwar nicht zum Download frei gibt, aber wenigstens schreibt er den Inhalt der Datei auf die Browserseite^^ Also irgwas geht da noch nicht.... habt ihr nen Beispielcode?
 
Zuletzt bearbeitet:
Wenn der Binärcode ausgegeben wird, dann sendest Du nur den falschen Content-type. Setze den richtigen Content-type mit header(), dann klappt es. "Richtig" heißt in dem Fall, dass der Content-type zur Datei passen muss. Also "text/html" für eine HTML-Datei, "image/jpeg" für ein JPG-Bild.
 
Ich hab den content-type: " application/pdf " ist das richtig?
ALso ich hab den header, in dem ich alle downloads einbringe, und dann im html-part die initialisierung: " readfile ( 'datei.pdf' ); " ???

Ich hab den header auch so angewandt wie er in php.net steht und der content-type ist doch eigentlich auch der richtige....und trotzdem wird die datei nicht zum Download angeboten sondern ausgelesen??!
 
Werbung:
ER hats geschluckt :) (tschuldigung für das Doppelposting!!)

Also hier der code, den ich benutzt habe:
Code:
[FONT=Courier New][COLOR=#0000bb]header[/COLOR][COLOR=#007700]([/COLOR][COLOR=#dd0000]"Content-type: application/pdf"[/COLOR][/FONT][COLOR=#007700][FONT=Courier New]); [/FONT][/COLOR]
 
[FONT=Courier New][COLOR=#0000bb]header[/COLOR][COLOR=#007700]([/COLOR][COLOR=#dd0000]"Content-Disposition: attachment; filename=downloaded.pdf"[/COLOR][/FONT][COLOR=#007700][FONT=Courier New]); [/FONT][/COLOR]
 
[FONT=Courier New][COLOR=#0000bb]readfile[/COLOR][COLOR=#007700]([/COLOR][COLOR=#dd0000]'original.pdf'[/COLOR][COLOR=#007700]);[/COLOR][/FONT]

Aber noch eine Frage: Wie bekomme ich es hin, dass er Dateien nicht beim Aufruf der Seite öffnet, sondern auf Befehl?
Und wie bekomme ich es hin, das man mehrere dateien auf einer php Seite downloaden kann? Muss ich für jeden Download einen header definieren?


Geht das auch mit "if" einem "auslösebefehl" und "readfile"??? else dann nichts machen?^^
 
Zuletzt bearbeitet:
Wie bekomme ich es hin, dass er Dateien nicht beim Aufruf der Seite öffnet, sondern auf Befehl?

Verlinke eine php-Datei in der Du als Parameter die herunterzuladende Datei angibst.

Code:
download.php?file=datei.pdf

Parameter in der Datei auslesen, Content-type setze, fertig. Sobald jemand auf den Link klickt, wird die im Parameter angegebene Datei runtergeladen.

Und wie bekomme ich es hin, das man mehrere dateien auf einer php Seite downloaden kann? Muss ich für jeden Download einen header definieren?

Siehe oben. Optional kannst Du auch pro Datei den Content-type auch ermitteln lassen und ihn dann dort eintragen. So hast Du einen php-Code für beliebig viele Dateien.
 
Hey danek threadi...

Also ich habe jetzt das hier in die verlinkte php datei eingegeben:
Code:
?php 
header("Content-Type: application/octet-stream'");
header("Content-Disposition: attachment; 
filename="\???????????\"");
readfile($HTTP_GET_VARS["file"])

?>

und das hier im aufruf:
Code:
download/file.php?file=Dokument.pdf

Wie bekomme ich es hin, das er den wirklcihen dateinamen nimmt, den die datei hat? Jetzt nimmt er ja für jede datei den gleichen namen.
 
Zuletzt bearbeitet:
Werbung:
Ist doch einfach ;)

Code:
header("Content-Disposition: attachment; filename="\".$_GET["file"]."\"");

Achte jedoch darauf die per GET übergebenen Dateinamen vorher noch zu prüfen. Z.B. ob die angegebene Datei auch wirklich existiert

Code:
file_exists($pfad."/".$_GET["file"])
 
Ich denke deine lösung ist ganz nah dran^^
Bestimmt nur ein kleiner Fehler.....(muss get nicht definiert werden?)

ich bekomme die Fehlermeldung:
Code:
[B]Warning[/B]: Unexpected character in input: '\' (ASCII=92) state=1 in [B]/.../.../file.php[/B] on line [B]4[/B]
 
[B]Parse error[/B]: syntax error, unexpected '"' in [B]/.../.../file.php[/B] on line [B]4[/B]

dateitransfer:
Code:
<?php 
session_start(); 
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename="\".$_GET["file"]."\"");
readfile($HTTP_GET_VARS["file"]);
 
?>
Hab versucht den Fehler selber zu fidnen, aber alle versuche habens nur schlimmer gemacht^^
 
Zuletzt bearbeitet:
Du hast ein " falsch maskiert. Schau mal genau hin.

Code:
header("Content-Disposition: attachment; filename=[COLOR=Red]\[/COLOR]"".$_GET["file"]."\"");
 
Werbung:
Zurück
Oben