2017-08-19 4 views
1

Ich möchte Dateien vor dem Download geschützt werden, wenn der Link bekannt ist. Ich habe eine Datei in meinem Stammordner und erstellt eine .htaccess-Datei mit folgendem:Wie erlaube ich PHP-Dateizugriff auf verbotene Dateien

<Files ~ "\.xlsx$"> 
    Order allow,deny 
    Deny from all 
</Files> 

Wenn die Verbindung (www.domain.com/excel.xlsx) geladen wird, erzeugt der Browser einen 403 Forbidden Fehler. Das ist richtig.

Ich habe diese PHP-Datei in einem Ordner in der Wurzel gelegt:

<?php 
    echo '<a href="../Excel.xlsx" download>Click to download</a>'; 
?> 

Aber wenn ich zum Download klicken, bin ich ein 403-Fehler gegeben wieder.

Wie kann ich PHP erlauben, auf diese Datei zuzugreifen und sie mit dem folgenden Code herunterzuladen? Vielen Dank!

+1

Sie müssten wahrscheinlich eine Download-Proxy-Datei wie 'download.php? File = thefilename.xlsx' erstellen. In dieser Datei lesen Sie dann den Dateiinhalt mit PHP und geben ihn an den Browser zurück. Dann können Sie auch prüfen, ob der Benutzer angemeldet ist, oder ein CSRF-Token hinzufügen, um zu bestätigen, dass die Anfrage von Ihrer Site kommt. (Suchen Sie einfach nach "force download php" und Sie erhalten viele Beispiele). –

+1

Sie verwenden ein "Routing-Skript". Erstellen Sie einen Link wie 'router.php? File = Excel.xlsx', mit dem Sie php-Sitzungsinformationen verwenden können, um zu entscheiden, ob Sie den Dateiinhalt weitergeben möchten oder nicht. Sie müssen in diesem Fall auch die richtigen Header senden. Besser noch ist es, eine Referenz wie 'route/Excel.xlsx' zu erstellen und das interne HTTP-Server-Rewriting zu verwenden, um solche eingehenden Anfragen an Ihr Routing-Skript' route.php' umzuleiten. – arkascha

Antwort

0

Im Moment verwenden Sie nicht php, um die Datei an den Benutzer zu senden. Der Benutzer klickt einfach auf einen Link und versucht direkt auf die Datei zuzugreifen. So wird das in einem 403 enden.

Sie müssen die Datei Server-Seite über PHP lesen und es als Stream an den Benutzer senden. Hier ist ein Code-Beispiel:

// open the file in a binary mode 
$name = './Excel.xlsx'; 
$fp = fopen($name, 'rb'); 

// send the right headers 
header("Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); 
header("Content-Length: " . filesize($name)); 

// dump the xlsx and stop the script 
fpassthru($fp); 
exit; 
0

Prüfung für die Genehmigung Ihrer .htaccess-Datei, aufgelöst 644 durch Ausgabe.

Verwandte Themen