我允許用戶上傳文件到服務器。但是,我不希望他們明顯看到文件的存儲位置。我能做什麼,將允許他們仍然得到文件,但沒有看到文件的位置。如何防止顯示文件位置?
回答
您可以使用PHP查詢做到這一點,可以說你使用以下網址:
http://mysite.com/files.php?file=xyz.pdf
在files.php可以檢查得到變量文件,並且具有檢索文件中的硬編碼功能。您可以通過使用頭來強制下載或將文件讀入var並將其內容打印到頁面中來以多種方式執行此操作。對於像PDF閱讀文件並將其打印到頁面與將其鏈接到文件相同。
雖然警告:與使用標題一樣,除了文件外,不會在頁面上打印任何內容。如果您閱讀文件並打印它,以便最終用戶不會得到作爲文件來源的gopbly goop(即jpg或pdf),我還建議您繼續聲明頭文件。
哦不,我忘了標題警告,自從Adobe爲PDF的開放源代碼製作ISO標準以來,我一直在遇到標題問題,具體取決於生成PDF的應用程序和用戶上傳的瀏覽器來自頭部PDF將是什麼:
'application/pdf', 'application/x-download','application/octet-stream','application/octet','binary/octet-stream'
所以要小心硬編碼上傳部分頭型,我知道這個問題是關於下載,但我只是想我會扔在那裏。同樣使用頭文件下載並不重要,我只是簡單地使用標準的應用程序/ PDF。
使用一些可以映射到真實文件的隨機唯一ID存儲它,然後使用實際文件上的readfile()
腳本來提供它。
http://php.net/readfile文檔也有一個關於如何強制下載的例子。
有待辦事項這幾種方法,但我更喜歡使用的.htaccess
所以我的鏈接看起來像在URL中http://example.com/files/filename.zip
額外的參數可以用來像一個用戶名或密碼:
http://example.com/files/bob/filename.zip
http://example.com/files/18d52c/filename.zip
然後可以檢查數據庫,看看是否允許用戶下載該特定文件,就像您在付款後用於即時下載一樣..但基本方法將如下所示:
的.htaccess
RewriteRule ^files/(.*)$ serve.php?file=$1
serve.php
<?php
if(isset($_GET['file'])){
$file=basename($_GET['file']);
//Protect the index.php && serve.php
if(basename($_GET['file'])=='index.php' || basename($_GET['file'])=='serve.php'){
header("HTTP/1.1 403 Forbidden");die();
}
$downloadFolder="original_location/";
if(file_exists($downloadFolder.$file)){
$fsize = filesize($downloadFolder.$file);
$ctype=finfo_file(finfo_open(FILEINFO_MIME_TYPE), $downloadFolder.$file);
if(ini_get('zlib.output_compression'))
ini_set('zlib.output_compression', 'Off');
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false);
if(strstr($_SERVER["HTTP_USER_AGENT"],"MSIE")==false) {
header("Content-Type: application/force-download");
header('Content-Description: File Transfer');
}else{
header("Content-Type: $ctype");
}
header("Content-Disposition: attachment; filename=\"".basename($file)."\";");
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".$fsize);
ob_clean();
flush();
readfile('original_location/'.$file);
}else{
header("HTTP/1.0 404 Not Found");
}
die();
}
header("HTTP/1.0 404 Not Found");
?>
original_location/index.php文件
header("HTTP/1.1 403 Forbidden");
您可以使用http://www.php.net/manual/en/ref.fileinfo.php替換整個MIME類型的業務... –
感謝您添加了您的建議。 –
+1美麗的實現那裏勞倫斯,它涵蓋了所有的基礎和錯誤情況。我現在對我的回答幾乎感到羞愧,我的意思是我基本上告訴過他同樣的事情,但是你的代碼覆蓋了所有的基礎,如果你不介意我想將它添加到我的代碼庫中,當然可以參考你的代碼。 – BrandonS
- 1. 如何防止顯示.plist文件名
- 2. 如何防止null顯示?
- 3. 如何防止附件內容在郵件正文中顯示?
- 4. iphone - 防止附件顯示
- 5. 如何防止Delphi MainForm顯示何時顯示文件對話框?
- 6. 如何防止TreeView改變其位置?
- 7. 如何防止JLabel職位重置?
- 8. 如何防止CCLabelBMFont更新位置?
- 9. 如何防止在地址欄中顯示文件?
- 10. 如何防止日蝕顯示某些文件的svn變化
- 11. 如何防止我的php顯示csv文件中的列?
- 12. 如何防止我的批處理文件顯示路徑?
- 13. 如何防止密碼顯示在紅寶石模板文件
- 14. 防止NavBar顯示
- 15. iOS:如何防止在後臺顯示位置相關的警報?
- 16. 如何防止「MainActivity屏幕」顯示
- 17. 如何防止在NSMenuItem中顯示keyEquivalent
- 18. 如何防止顯示調試消息?
- 19. 如何防止XStream顯示class =「string」?
- 20. 如何防止在URL中顯示JSESSIONID
- 21. 如何防止顯示PDO錯誤?
- 22. 如何防止IE顯示網站?
- 23. 如何防止頁面顯示圖像?
- 24. 如何防止Android的旋轉顯示?
- 25. 如何防止逐漸顯示頁面?
- 26. 如何防止按鈕突出顯示
- 27. 如何防止顯示源代碼
- 28. 如何防止mysql錯誤顯示錶?
- 29. 如何防止突出顯示圖標?
- 30. 如何在Java中顯示文件的文件夾位置?
爲什麼他們會看到被存儲的文件在哪裏? – Mike
爲了向他們提供文件,會有鏈接下載,對吧? – KPO
正在談論上傳(客戶端發送文件到服務器)還是下載(客戶端從服務器上拉文件)? – Mike