簡體   English   中英

如何在 PHP 中創建動態下載鏈接

[英]How to create Dynamic Download Link in PHP

有沒有辦法可以在 PHP 中為單個文件創建一個動態下載鏈接一段時間,或者下載鏈接在該時間后過期。 在那段時間之后,下載鏈接會發生變化。

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

任何人都可以幫助我。

一種解決方案:

  1. 創建一個數據庫表,其中存儲一個大的唯一 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 與下載捆綁在一起。

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

小心!

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

數據庫表:

id 文件(超出可公開訪問的路徑)過期

然后有一個腳本 get-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*day(86400 是一天的秒數)。 如果下載在該時間范圍內,則允許下載,否則不允許。 然后,您可以使用 readfile() 輸出要下載的文件,並使用 header() 調用調整編碼。 要獲得更具體的幫助,您必須發布一些代碼。

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

注意:如果您需要自動查看 cron 作業。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM