2012-06-12 15 views
10

Ich möchte den Speicherort des Download-Ordners ausblenden, damit der Benutzer den Speicherort des Downloads nicht sehen kann. Ich denke, das kann mit einer .htaccess Datei gemacht werden, aber wie mache ich das? Alternativ wie kann dies mit PHP gemacht werden?So verbergen Sie den Speicherort des eigentlichen Download-Ordners

+0

Nein, du kannst nicht. Dies ist eine grundlegende Sache, damit der Benutzer mit der von ihm heruntergeladenen Datei tun kann, was er möchte. – yent

+0

Ich denke, er meint, wie die URL des Download-Skriptes – michael

+0

@yent eigentlich ich nur den Ort des Benutzers verstecken wollen, wo die Datei existieren –

Antwort

24

ist, wie ich es in PHP zu tun:

<?php 
$fakeFileName= "fakeFileName.zip"; 
$realFileName = "realFileName.zip"; 

$file = "downloadFolder/".$realFileName; 
$fp = fopen($file, 'rb'); 

header("Content-Type: application/octet-stream"); 
header("Content-Disposition: attachment; filename=$fakeFileName"); 
header("Content-Length: " . filesize($file)); 
fpassthru($fp); 
?> 

Außerdem, wenn Sie jemand nicht wollen, Zugang zum Speicherort der Datei haben, eine Datei .htaccess in Ihre Download-Ordner mit nur dem Inhalt benannt setzen :

deny from all 

Ich änderte den Code ein wenig. Zuerst, wenn ich gefälschten Dateinamen und echten Dateinamen sage, ist der falsche Dateiname der Name, unter dem der Downloader die Datei herunterladen wird, wobei der tatsächliche Dateiname der Name der tatsächlichen Datei im Download-Ordner auf Ihrem Server ist.

Außerdem überprüfe ich, ob der Benutzer angemeldet ist und die Datei herunterladen kann. Wenn er die Datei herunterladen wählt, wird eine PHP-Datei in einem neuen Tab (mit dem Download-Code von oben) genannt wird, dann am Ende der Datei habe ich die Zeile:

exit; 

Also, wenn er auf klickt Durch den Download-Link erscheint eine leere Seite schnell in einem neuen Tab, dann wird der Download schnell beendet und der Download beginnt.

EDIT: Die Download-Link sieht wie folgt aus etwas:

<a href="simpleDown.php?id=<?php echo $_GET['id']; ?>" target="_blank">Download!</a> 

id Wo ist die id des Download in der Datenbank und in Download-Skript von oben ich den Eintrag mit diesen id finden, dann erhalten Sie seinen echten Dateinamen und den falschen Dateinamen. Sie können dies jedoch ohne die Datenbank tun.

+1

'.htaccess' ** nicht **' .htacess' (zumindest mit den Standardeinstellungen) – Lix

+0

oh mein böser, haha, behoben – iedoc

+0

@iedoc aber, wie ändere ich die Domain des Herunterladens von URL. – Kumar

4

Vielleicht möchten Sie entweder in Mod Rewrite suchen oder Ihr PHP-Skript verwenden, um auf die Datei zuzugreifen, indem Sie einfach file.php?f=someHash aufrufen und dann einen Oktettstream verwenden, um den Benutzer zum Herunterladen der Datei zu zwingen.

+2

+1 - Dies wäre die ideale Lösung. Das Übergeben aller Downloads durch ein PHP-Skript bedeutet nicht nur, dass Sie das Datenverzeichnis aus dem öffentlichen Stammverzeichnis entfernen können, sondern Sie können auch Sicherheitschecks darüber legen. Idealerweise referenzieren Sie die Dateien auch nicht nach Dateiname. Verwenden Sie eine ID, die der Datei zugeordnet ist, so dass der Name beliebig geändert werden kann, ohne bestehende Verknüpfungen zu unterbrechen. – michael

2

Was Sie tun möchten, ist der Benutzer gerichtet auf fake_url.php und dann schreiben Sie diese URL in eine andere Datei - real_url.php. Dies macht die real_url.php als versteckt, weil der Benutzer die Weiterleitung in Ihrer .htaccess Datei nicht bewusst ist.

RewriteRule fake_url.php(.*)$ real_url.php?$1 [L,QSA] 

In Ihrem real_url.php, können Sie die Parameter übergeben durch die Umleitung lesen und dann etwas Ähnliches wie readFile() benutzen Sie die entsprechende Datei zurück an den Benutzer zu senden innerhalb real_url.php

der Benutzer So sehen nur die URL -
https://my-secret-site/download.php?file=file_to_download

Und in Ihrem real_url.php Sie wissen, welche Datei durch Überprüfen der $_GET['file'] Parameter angefordert wurde.

Der tatsächliche Speicherort der vom Benutzer heruntergeladenen Dateien spielt keine Rolle mehr. Alle Downloads gehen durch fake_url.php und nur dieses Skript muss den tatsächlichen Speicherort des Downloads-Ordners kennen. Diese

-1

Ich denke, der Hauptteil ist "Schreiben zu. Htaccess", die einfach durch fwrite getan werden kann, aber diese Lösung wird nicht funktionieren, wenn Sie Benutzer geben, eine Auswahl von Online-Lesen der PDF-Datei in diesem Fall Socket braucht mehr Zeit zu öffnen (irgendwie, wenn Sie dies tun werden, dann kann dies Ihre Sicherheit gefährden!),

<?php 
session_start(); 
$fileLocation = getenv("DOCUMENT_ROOT") . "your_download _folder/.htaccess"; 
$file = fopen($fileLocation,"w"); 
$k="\.(md|htaccess)$"; 
$content = "IndexIgnore * 
Order Deny,Allow 
Deny from All 

AddType application/octet-stream .pdf"; 
fwrite($file,$content); 
fclose($file); 
$p=getenv("DOCUMENT_ROOT") . "your_download _folder/".$_SESSION['x'](file_to_be_downloaded !); 
header("Content-type:application/pdf"); 
header("Content-Disposition:attachment;filename=".$_SESSION['x']); 
readfile($p); 
$fileLocation = getenv("DOCUMENT_ROOT") . "your_download _folder/.htaccess"; 
$file = fopen($fileLocation,"w"); 
$k="\.(md|htaccess)$"; 
$content = "IndexIgnore * 
Order Allow,Deny 
Deny from All 

AddType application/octet-stream .pdf"; 
fwrite($file,$content); 
fclose($file); 
exit; 
?> 

Ergebnis: im nächsten Fenster (die im nächsten Moment geschlossen werden), ein Datei-Download-Option wird für den Benutzer ausgelöst werden.

Verwandte Themen