簡體   English   中英

使用php,apache創建動態,可過期和可恢復的下載鏈接

[英]Create dynamic, expireable and resumable download link using php, apache

這是問題的詳細信息:

1)我想創建動態(基於IP)的下載鏈接。 因此,用戶無法使用相同的下載鏈接下載具有不同IP的文件。

2)在開始實際下載之前,我想使用php記錄此下載請求並執行一些檢查(驗證http Referrer)以允許用戶下載實際文件。

3)我也希望下載文件可恢復,並且可以使用下載管理器(具有多個下載實例)進行下載。 還希望限制每次下載的最大允許實例數。

4)文件大小可能超過200 MB。

因此,我正在考慮的解決方案是使用用戶ip的md5哈希創建下載鏈接。 例如http://yourdomain.com/download.php?ip_hash=hash-of-the-ip&file=文件下載

這只是一個示例,但是我們也可以使用htaccess創建一個不錯的鏈接。

我下一步該怎么辦? 我嘗試使用

header("Content-Type: $ctype");
header("Content-Length: " . filesize($file));
header("Content-Disposition: attachment; filename=\"$fileName\"");
readfile($file);

但是,使用此方法下載對於最終用戶而言不會恢復。

使用這種方法發送大文件可以嗎?

經過研究后,我發現最終用戶使用此方法損壞了.exe文件。

經過更多研究后,我找到了問題的答案。 我只是認為我也應該與你們分享。

正如Rambo所說,我們可以使用apache服務器的mod_xsendfile模塊。 如果禁用它,我們需要啟用它。

如果您的apache沒有此模塊,則這里是下載模塊文件的鏈接。 它適用於幾乎所有版本的apache,並且適用於x32和x64。
https://github.com/nmaier/mod_xsendfile

完成所有自定義驗證后,可以使用以下代碼使用此apache模塊發送文件。

<?php
//We want to force a download box with the filename hello.txt
header('Content-Disposition: attachment;filename=hello.txt');

//File is located at data/hello.txt
header('X-Sendfile: data/hello.txt');
?>

希望對您有幫助:)

暫無
暫無

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

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