[英]How to create Dynamic Download Link in PHP
有沒有辦法可以在 PHP 中為單個文件創建一個動態下載鏈接一段時間,或者下載鏈接在該時間后過期。 在那段時間之后,下載鏈接會發生變化。
實際上,我有一個要求,即只能通過特定電子郵件訪問下載鏈接。 由於它的大小,我無法將該文件添加為附件。
任何人都可以幫助我。
一種解決方案:
創建一個數據庫表,其中存儲一個大的唯一 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 與下載捆綁在一起。
無論哪種方式,您都有一個可以發送給最終用戶的安全、可過期的鏈接。
小心!
當然,將文件的路徑以及唯一標識符和到期時間戳存儲在數據庫中。 然后,當用戶在 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() 調用調整編碼。 要獲得更具體的幫助,您必須發布一些代碼。
注意:如果您需要自動查看 cron 作業。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.