有沒有辦法在一段時間內爲單個文件創建PHP中的動態下載鏈接,或者下載鏈接在該時間之後過期。在那段時間之後,下載鏈接改變。如何在PHP中創建動態下載鏈接
其實我有一個要求,只有通過特定的電子郵件才能訪問下載鏈接。由於其大小,我無法將該文件作爲附件添加。
任何人都可以幫助我。
有沒有辦法在一段時間內爲單個文件創建PHP中的動態下載鏈接,或者下載鏈接在該時間之後過期。在那段時間之後,下載鏈接改變。如何在PHP中創建動態下載鏈接
其實我有一個要求,只有通過特定的電子郵件才能訪問下載鏈接。由於其大小,我無法將該文件作爲附件添加。
任何人都可以幫助我。
一種解決方案:
創建數據庫表w ^它存儲一個大的唯一ID(隨機),以及要下載的文件的名稱/位置/內容。還包括過期日期。
id | filename | expires
----------------------+--------------------+--------------------
fsdhfs7dfsniuf92un3f2 | secret.doc | 2012-03-23 23:32:32
sdf8shdf829nf32ufn23f | secret2.doc | 2012-03-13 23:32:33
電子郵件給最終用戶的鏈接...鏈接應該是這樣的:
http://yoursie.com/download/fsdhfs7dfsniuf92un3f2
使用Apache重寫規則(mod_rewrite的),這將捕獲好看的鏈接,並通它的PHP頁面:
RewriteEngine on
RewriteRule ^/download/([a-z0-9]{20})$ /download.php?id=$1
在該腳本,download.php
,看$_GET['id']
。運行數據庫查詢來查找記錄。檢查到期日期。如果一切正常,然後繼續。
要麼使用PHP腳本輸出正確的頭文件並下載文件,要麼發送內部重定向到像nginx這樣的前端代理,這會將下載過程卸載到nginx,而不會將PHP與下載綁定。
無論哪種方式,您都有一個安全的,可過期的鏈接,您可以發送給最終用戶。
保重!
是通過數據庫表添加鏈接過期效果很好......但是有沒有一種方法可以確定傳入的下載鏈接來自特定的電子郵件,如果用戶單擊了電子郵件中的鏈接 – user434509 2012-03-15 18:03:56
@ user434509:將電子郵件地址添加到數據庫表,併爲您發送給每個電子郵件地址生成一個唯一的鏈接。 – gahooa 2012-03-16 04:25:24
當然,將文件路徑存儲在數據庫中,以及唯一標識符和到期時間戳。然後,當用戶在獲取變量中訪問具有唯一標識的鏈接時,請檢查時間戳並相應地獲取文件/顯示錯誤。
數據庫表:
ID 文件(出來公開訪問路徑) 到期
然後有一個腳本得到-file.php ID = XXXXXX
<?not-real-code
Delete everything expired from table
Look up record for id=XXXXXXX
If exists then use something like readfile() to read and output file
Delete record in table
你可以安裝一個數據庫,你把你的文件,一個時間戳和點擊在一個表中。在你的腳本中,你可以檢查時間戳+86400 *天(86400是一天的秒數)。如果下載是在這個時間範圍內,它將被允許,否則不允許。然後,您可以使用readfile()輸出要下載的文件,並使用header()調用來調整編碼。要獲得更具體的幫助,您需要發佈一些代碼。
注意:如果您需要自動執行任何cron作業。
你在這裏要求很多。有沒有你正在努力的一段特定的代碼?如果你只是想知道php是否可以做所有這些事情,是的,它可以。 – user783322 2012-03-15 17:10:45
我列出了以下5個步驟,您可以按照以獲得一個非常好的解決方案。您必須閱讀文檔並找出詳細信息,但可以隨時對我的答案發表評論以瞭解更多細節。 – gahooa 2012-03-15 17:12:04