2017-08-21 103 views
0

我需要提供一個文件生成每個客戶獨特的URL下載同一個文件

example.com/realpathofthe/file.zip 

給客戶,但我不希望同樣的URL傳達給所有客戶(他們可以很容易地共享URL非 - 客戶,並且很難跟蹤產品是否交付)。相反,我產生在PHP中的隨機字符串,並希望分享這樣的URL:

example.com/download/djbf6xu83/file.zip 

,這將是爲每個客戶不同的。

問題:我應該爲每個客戶生成符號鏈接,以將隨機字符串路徑鏈接到服務器上實際文件的路徑嗎?
或者在.htaccess中爲此使用RewriteRule?但如果這樣做(即重寫/download/*/file.zip到實際文件),所有隨機字符串將鏈接到相同的文件。這不好,因爲非客戶可以自己生成下載鏈接。 如何正確處理?

注意:我希望儘可能避免PHP在交付之前處理千兆字節的文件數據(通過file_get_contents())。我想(如果我錯了,請糾正我)讓服務器讓Apache分發文件更輕。

+0

將隨機字符串存儲在數據庫中。然後使用重寫規則重定向到一個PHP腳本,它將得到隨機字符串並將其與您的數據庫匹配,然後如果可以,發送文件。該文件始終是相同的,但您的腳本將驗證隨機字符串。 – Armage

+1

爲什麼不將RewriteRule用於PHP腳本文件,並檢查隨機字符串在那裏是否有效? – Fredster

+0

@Armage是的,但是PHP在傳遞之前必須處理千兆字節的文件數據(通過'file_get_contents()')。有沒有辦法避免這種情況,讓Apache分發文件? – Basj

回答

0

可以有很多方法來解決這個問題。這是我的建議。 製作一個文件,例如/download.php,並將下載代碼作爲HTTP GET variable傳遞。所以它會說類似/download.php?code=abcdef,同時在數據庫中爲每個客戶生成並存儲代碼,並在有人打開download.php時檢查代碼是否存在。易於追蹤,而不是創建複雜的目錄結構。

+0

謝謝。但是這意味着PHP必須處理千兆字節的數據(請參閱原始文章中的註釋)。 – Basj

+0

https://stackoverflow.com/questions/7263923/how-to-force-file-download-with-php你不必使用file_get_contents(); – Mav

相關問題