2012-06-14 48 views
0

這裏的問題是細節:使用PHP創建動態,expireable和斷點續傳的下載鏈接,appache

1)我想根據創建動態(IP),下載鏈接。因此,用戶不能使用相同的下載鏈接下載具有不同IP的文件。

2)之前開始實際的下載,我想用PHP來記錄這些下載請求,並進行一些檢查(檢查HTTP參照),以允許用戶下載的實際文件。

3)我也想下載的文件是可恢復的,並且可以與下載管理器進行下載(有多個下載實例)。還希望限制每次下載允許的最大實例數。

4)的文件大小可能超過200點的MB。

所以,這我想到的解決辦法是建立與用戶的IP的MD5哈希的下載鏈接。例如。 http://yourdomain.com/download.php?ip_hash=hash-of-the-ip&file=file-to-download

這只是一個例子,但我們也可以使用htaccess創建一個很好的鏈接。

我應該做的下一步是什麼?我試圖使用

header("Content-Type: $ctype"); 
header("Content-Length: " . filesize($file)); 
header("Content-Disposition: attachment; filename=\"$fileName\""); 
readfile($file); 

但是,使用此下載不會保持對最終用戶是可恢復的。

這是精細使用這種方法來發送大文件?

做了一些研究之後,我才知道,該.exe文件已損壞,使用這種方式的最終用戶。

請告訴我所有這些問題的最佳解決方案。

在此先感謝。

+1

你要確保你鹽散列否則用戶可以從別的地方簡單地通過與他們的新IP的MD5替換它下載。 –

+1

https://tn123.org/mod_xsendfile/ – goat

+0

如果用戶沒有靜態IP地址會怎麼樣?也許最好是實施一個用戶帳戶系統。 –

回答

1

做一些更多的研究後,我發現我的問題的答案。我只是覺得我應該和你們分享一下。

作爲蘭博評論,我們可以使用Apache服務器的mod_xsendfile模塊。如果它被禁用,我們需要啓用它。

這裏是下載的模塊文件,如果你的apache沒有這個模塊的鏈接。它主要適用於所有的apache版本,並可用於x32和x64。
https://github.com/nmaier/mod_xsendfile

在完成所有自定義驗證之後,您可以使用以下代碼使用此apache模塊發送文件。

<?php 
//We want to force a download box with the filename hello.txt 
header('Content-Disposition: attachment;filename=hello.txt'); 

//File is located at data/hello.txt 
header('X-Sendfile: data/hello.txt'); 
?> 

我希望這會幫助你們:)