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
Antwort
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.
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.
+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
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
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.
- 1. So ermitteln Sie den Speicherort eines Druckers
- 2. So verbergen Sie das Fenster
- 3. Codeigner - Verbergen des Controllernamens. Zeigen Sie einfach den Parameter
- 4. So zeigen/verbergen Sie Inhalt
- 5. Verbergen Sie den TabControl-Header
- 6. So verbergen Sie den Navigationscontroller in der Stammansicht?
- 7. So ändern Sie den Speicherort der Seite zur Laufzeit
- 8. CMAKE So erhalten Sie den Speicherort der Zieldatei
- 9. Ändern Sie den Speicherort des SQL Server-Wartungsplanberichts?
- 10. Wie finde ich den Speicherort des Scratchpuffers?
- 11. So verbergen Sie die Sichtbarkeit einzelner PivotItems
- 12. So ändern Sie den Speicherort des Inhaltsverzeichnisses in einem MediaWiki-Skin
- 13. Steuern Sie den WinForms Tooltipp-Speicherort
- 14. So verbergen Sie meinen WCF-Dienst
- 15. Wählen Sie den Speicherort der kompilierten Datei
- 16. So ändern Sie den Titel des Eingabeaufforderungsfensters
- 17. So konfigurieren Sie den Titel des Alarmdialogs
- 18. So ändern Sie den Datenkontext des Interaktionstriggers
- 19. So erhalten Sie den Geltungsbereich des Gitters
- 20. Erkennen Sie den Speicherort von AppData \ LocalLow
- 21. NGINX: Der Hauptortblock überschreibt den Speicherort des Unterverzeichnisses?
- 22. SQL Server 2005 muss den Speicherort des Volltextkatalogs verschieben?
- 23. So legen Sie einen Standard-Speicherort für eine Bildlaufleiste
- 24. So verbergen Sie die Karte, aber zeigen Sie andere Ebenen
- 25. Wie ändere ich den Speicherort des Dropdown-Menüs dat.gui?
- 26. Collections.min gibt den Speicherort anstelle des Werts zurück
- 27. Wie kann ich den Speicherort des Influxdb-Speicherordners ändern?
- 28. Xcode ändert den Speicherort des Anwendungsordners auf Build
- 29. Yii2 Können wir den Speicherort des Anlagenverzeichnisses ändern?
- 30. Nuget Wie kann ich den Speicherort des Pakets angeben?
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
Ich denke, er meint, wie die URL des Download-Skriptes – michael
@yent eigentlich ich nur den Ort des Benutzers verstecken wollen, wo die Datei existieren –