2010-03-25 181 views

回答

0

將實際文件存儲在公共html區域之外,然後在PHP腳本中簡單地發送適當的頭文件(Content-Type,Content-Length,Content-Disposition),最後從文件私有位置讀取文件。

+0

謝謝,讀取public_html之外的文件的任何示例!? – 2010-03-25 09:02:33

1

在允許下載以確保它們不是來自另一個頁面之前,您可能需要考慮檢查$ _SERVER ['HTTP_REFERER']的值。

至於隱藏只是做它的形式

yoursite.com/download.php?file=filename 

然後在你的代碼只是ReadFile的()在一個隱藏目錄中的文件的內容 - 你可以拒​​絕使用的.htaccess的物理訪問,如果你是真的很關心,或者你可以用a來啓動目錄名。這將再次停止外部訪問。這並不是必須的,因爲沒有辦法知道(或猜測)隱藏的目錄名稱。

作爲一個備註,如果您正在進行任何數據庫訪問並提供大型文件供下載,您必須在readfile()之前關閉數據庫連接,因爲在整個持續時間內連接將被視爲「打開」(即使它是十分鐘的下載),在這種情況下很容易達到最大連接限制。

0

reko_t就在這裏。

如果您的文檔根目錄是在/ var/www/mysite中,您可以使用像/ var/www/files這樣的文件夾。這將使您的文件無法從網絡訪問。然後你必須在php中創建一個下載腳本。如果您需要使用相對路徑($ filename = realpath(「../ files/$ fileid。$ fileext」);),則可以使用realpath生成絕對路徑。

查看php.net的readfile文檔中的用戶註釋,並查找函數readfile_chunked。我在我自己的代碼中使用該函數。很有用。

0

您可以通過PHP將文件流式傳輸給最終用戶。這將使它可以同時隱藏和保護您的文件。

看看php header page如果向下滾動,會有很多關於如何通過php流式傳輸文件的例子。他們大多數可以複製並投入使用。

1

一些防止盜鏈的方法我能想到(按照複雜度的增長順序)。

  1. 檢查$ _SERVER ['HTTP_REFERER'];如果它屬於您的網站或它是空白的,請允許下載;如果它屬於其他站點,則拒絕下載。

  2. 當用戶訪問列表並在下載腳本中閱讀時,在會話中存儲隨機ID。

  3. 生成一個隨機ID臨時鏈接:/download-4Gaw4MWfTH6dB9UgKILSFc2UlnIPRhMv/12.zip

(我不知道你在你的例子是什麼意思,但除去URL中的文件擴展名幾乎不是安全措施。)