2012-03-15 83 views
2

有沒有辦法在一段時間內爲單個文件創建PHP中的動態下載鏈接,或者下載鏈接在該時間之後過期。在那段時間之後,下載鏈接改變。如何在PHP中創建動態下載鏈接

其實我有一個要求,只有通過特定的電子郵件才能訪問下載鏈接。由於其大小,我無法將該文件作爲附件添加。

任何人都可以幫助我。

+0

你在這裏要求很多。有沒有你正在努力的一段特定的代碼?如果你只是想知道php是否可以做所有這些事情,是的,它可以。 – user783322 2012-03-15 17:10:45

+0

我列出了以下5個步驟,您可以按照以獲得一個非常好的解決方案。您必須閱讀文檔並找出詳細信息,但可以隨時對我的答案發表評論以瞭解更多細節。 – gahooa 2012-03-15 17:12:04

回答

5

一種解決方案:

  1. 創建數據庫表w ^它存儲一個大的唯一ID(隨機),以及要下載的文件的名稱/位置/內容。還包括過期日期。

    id     | filename   | expires 
    ----------------------+--------------------+-------------------- 
    fsdhfs7dfsniuf92un3f2 | secret.doc   | 2012-03-23 23:32:32 
    sdf8shdf829nf32ufn23f | secret2.doc  | 2012-03-13 23:32:33 
    
  2. 電子郵件給最終用戶的鏈接...鏈接應該是這樣的:

    http://yoursie.com/download/fsdhfs7dfsniuf92un3f2 
    
  3. 使用Apache重寫規則(mod_rewrite的),這將捕獲好看的鏈接,並通它的PHP頁面:

    RewriteEngine on 
    RewriteRule ^/download/([a-z0-9]{20})$ /download.php?id=$1 
    
  4. 在該腳本,download.php,看$_GET['id']。運行數據庫查詢來查找記錄。檢查到期日期。如果一切正常,然後繼續。

  5. 要麼使用PHP腳本輸出正確的頭文件並下載文件,要麼發送內部重定向到像nginx這樣的前端代理,這會將下載過程卸載到nginx,而不會將PHP與下載綁定。

無論哪種方式,您都有一個安全的,可過期的鏈接,您可以發送給最終用戶。

保重!

+0

是通過數據庫表添加鏈接過期效果很好......但是有沒有一種方法可以確定傳入的下載鏈接來自特定的電子郵件,如果用戶單擊了電子郵件中的鏈接 – user434509 2012-03-15 18:03:56

+0

@ user434509:將電子郵件地址添加到數據庫表,併爲您發送給每個電子郵件地址生成一個唯一的鏈接。 – gahooa 2012-03-16 04:25:24

2

當然,將文件路徑存儲在數據庫中,以及唯一標識符和到期時間戳。然後,當用戶在獲取變量中訪問具有唯一標識的鏈接時,請檢查時間戳並相應地獲取文件/顯示錯誤。

0

數據庫表:

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 
0

你可以安裝一個數據庫,你把你的文件,一個時間戳和點擊在一個表中。在你的腳本中,你可以檢查時間戳+86400 *天(86400是一天的秒數)。如果下載是在這個時間範圍內,它將被允許,否則不允許。然後,您可以使用readfile()輸出要下載的文件,並使用header()調用來調整編碼。要獲得更具體的幫助,您需要發佈一些代碼。

0
  1. 在網絡服務器上創建一個文件夾,其中有一個index.php文件,它說文件不再可用。
  2. 如果需要,創建一個指向index.php的.htaccess文件。
  3. 將您希望下載的文件添加到Web服務器上的文件夾中。
  4. 發送帶鏈接的電子郵件。
  5. 當你覺得它已經用完了刪除文件,人們會去index.php。

注意:如果您需要自動執行任何cron作業。