你想創建一個通用的下載助手,在那裏你可以得到某種獨特的ID和這個幫手返回正確的文件到最終用戶沒有透露該文件的真實路徑。
有很多方法來解決這個問題,它也取決於你想要達到的目的,以及有多少文件將提供下載(這將影響到簡單或實施的複雜性)
對於一個例子:
如果你有一個下載網站,它將服務於成千上萬的文件 - 你會想要實現一個方法能夠很好地處理N個文件,這可能會變得複雜(當然取決於你的要求)。
在另一方面 - 如果你只打算在服務器5-10文件,您可以創建一個非常簡單的輔助,將完成這項工作。
一個簡單的輔助的簡單例子:
的download.php
<?php
$fileId = $_GET['fileId'];
switch($fileId){
case 1:
$fileName = 'myFile.pdf';
break;
case 2:
$fileName = 'myOtherFile.doc';
break;
default:
$fileName = null;
}
if($fileName){
// $fileName is your file identifier
$fileFullPath = $_SERVER['DOCUMENT_ROOT'].'mySecretFolder/files/'.$fileName;
if (file_exists($fileFullPath)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($fileFullPath));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($fileFullPath));
ob_clean();
flush();
readfile($fileFullPath);
exit;
}
}
?>
HTML
<a href="https://www.my-domain.com/download.php?fileId=1"> Download PDF </a>
這只是一個簡單的例子,如果你需要使用提供少量文件並希望做出簡單,快速的實施。
如果你要服務器無限的文件或未知量,你將需要實現廣告投放系統的先進的文件(或使用現有的一個是開源的)。
希望它可以幫助一點
好吧,我要修改我的問題 – Duryab
含義,在您的下載頁面您需要的文件從瀏覽器下載?而不顯示文件在哪裏給用戶? – masterFly
是的,但下載請求通過表單html標籤從網頁提交到下載頁面 – Duryab