我.zip在一個子檔案夾中有一些檔案,當用戶登錄時可以下載這些檔案。為了防止為未登錄的用戶下載這些檔案(并知道某個 zip 檔案的路徑),我在.htaccess
<FilesMatch "\.(zip)$">
Order Allow,Deny
Deny from all
</FilesMatch>
問題是:如果用戶登錄,他也被阻止下載檔案
如果已登錄,我如何才能訪問該檔案,如果未登錄,我如何阻止該檔案的下載?
每個示例一個 zip 檔案存盤在: www.mydomain.com/data/downloads/download.zip
uj5u.com熱心網友回復:
通過 PHP 提供檔案,如果用戶已登錄,您可以使用 PHP 會話進行檢查。
可以做這樣的事情......(顯然,當您登錄用戶時,在會話中設定合適的內容):
<?php
session_start();
if (isset($_SESSION['loggedin']) && $_SESSION['loggedin'] == true) {
// or however you get the path
$yourfile = "/path/to/" . $_GET['file']. ".zip";
$file_name = basename($yourfile);
header("Content-Type: application/zip");
header("Content-Disposition: attachment; filename=$file_name");
header("Content-Length: " . filesize($yourfile));
readfile($yourfile);
exit;
} else {
echo "Please log in first.";
}
?>
顯然,您可以將檔案名作為查詢字串引數傳遞,并在 $yourfile 中使用它來提供適當的檔案。如果這樣做,這是正確的方法,可以在提供檔案之前進行一些檢查以確保檔案存在。
示例用法將如下所示:download.php?file=file1.zip
上面的例子假設您沒有使用任何框架(即 Laravel、CakePHP 等),如果您使用的是框架,我建議您使用可用的會話物件/函式。
將檔案存盤在 webroot 之外也是最佳做法,這樣您將確保它們受到保護。但這也適用于您的情況,只需將 $yourfile 設定為 /data/downloads 的絕對路徑。這樣做你不需要 .htaccess 的東西。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/359398.html
上一篇:如何讓html元素像文本一樣流動
下一篇:htaccess非www不重定向
