2009-01-30 84 views
3

我有一個個人項目已經上線了一段時間了。我一直在做這樣的下載記錄:最好的方式來透明地記錄下載?

  • 當用戶點擊下載鏈接,它擊中一個PHP腳本,寫一些信息到表。
  • 一旦數據被寫入,腳本就會返回實際文件的路徑。
  • 然後用戶可以將文件保存到硬盤上,就像是其他任何下載一樣。

這個功能已經夠用了一段時間;然而,它阻止用戶能夠right-click > save target as...,因爲他們實際上只會看到download.php出現在「文件保存..」對話框中。因此,下載項目的唯一方法是左鍵單擊該鏈接。

我想改進這個過程,以便用戶可以使用任何他/她最舒服的方法下載項目。那麼,有什麼更好的方式來透明地記錄下載,而不會以用戶的方式獲取?

對於什麼值得,機器是一個標準的LAMP堆棧,所以在這裏沒有.NET選項。

回答

3

這取自php-documentation,但也可以使用不同的腳本語言:

<?php 
// We'll be outputting a PDF 
header('Content-type: application/pdf'); 

// It will be called downloaded.pdf 
header('Content-Disposition: attachment; filename="downloaded.pdf"'); 

// The PDF source is in original.pdf 
readfile('original.pdf'); 
?> 

HTTP-Header Content-Disposition通知它將其保存爲下載。

另一種選擇是定期檢查您的日誌文件,如每天使用腳本。

+0

是的,我已經考慮過自動日誌解析路線,但我喜歡能夠將信息放在數據庫中。不過感謝PHP的建議,我可能會走這條路。 – Tom 2009-01-30 00:19:45

+0

您可以使用腳本填充該數據庫,具體取決於數據庫的最新狀態。 – 2009-01-30 00:23:24

1

這就是很多網站使用下載鏈接的原因,它會將您帶到另一個頁面,該頁面將在頁面加載時自動啓動下載,並且還爲用戶提供直接下載的鏈接。大多數情況下,它是獲取廣告展示次數的頁面瀏覽量的一種方式,但它也有助於跟蹤誰更容易下載文件。

1

answer詳細信息如何使用轉移頁面記錄下載以及一旦有人點擊鏈接開始下載文件。我最近測試了它的右鍵點擊。

我正在使用php中間人來記錄文件下載。格式爲http://192.168.1.1/xfer.php?file=Li9zb25ncy9HTE9XX0xlYXZlIFlvdXIgSGF0IE9uLm1wMw的URL會導致另存爲...的文件名,並在Firefox中左鍵單擊。

這裏是我的xfer.php

<? 
$filename = base64_url_decode($_GET['file']); 
if ($_GET['file']){ 
    header("Cache-Control: public"); 
    header("Content-Description: File Transfer"); 
    header('Content-disposition: attachment; filename='.str_replace(" ", "_",basename($filename))); 
    header("Content-Transfer-Encoding: binary"); 
    header('Content-Length: '. filesize($filename)); 
    readfile($filename); 
} 
$fh = fopen("test.html","a"); 
fwrite($fh,basename($filename)."\n<br />"); 
fclose($fh); 
function base64_url_decode($input) { 
    return base64_decode(strtr($input, '-_,', '+/=')); 
} 
?> 

並鏈接到xfer.php頁是

$link = "xfer.php?file=".base64_url_encode("./songs/$key"); 

$key是文件名和songs是該文件夾的文件名保存英寸

1

設置Google Analytics(分析)? :)