2008-08-01 99 views
65

我有一個可以在Flash播放器中播放mp3的網站。如果用戶點擊「播放」,Flash播放器會自動下載一個MP3並開始播放。如何跟蹤文件下載

有一種簡單的方法來跟蹤了多少次特定的歌曲片段(或任何二進制文件)已經被下載?


是播放鏈接鏈接到實際 MP3文件或一些JavaScript代碼 彈出一個播放器?

如果是後者,您可以輕鬆地在其中添加自己的日誌代碼 ,以便跟蹤 的點擊次數。

如果是前者,你需要一些 ,它可以跟蹤web服務器日誌 本身並做出區分。我的 託管計劃附帶webalizer, 這很好地做到了這一點。

它的JavaScript代碼,這樣回答說。

然而,這將是很好知道如何追蹤透過其他方式下載(無需切換主機)。

回答

39

有趣的是,我爲2天前的所有音樂編寫了一個php媒體庫。我有類似的問題。我爲玩家使用http://musicplayer.sourceforge.net/。播放列表通過php構建。所有音樂的要求去那裏一個叫做xfer.php文件腳本= WHATEVER

$filename = base64_url_decode($_REQUEST['file']); 
header("Cache-Control: public"); 
header("Content-Description: File Transfer"); 
header('Content-disposition: attachment; filename='.basename($filename)); 
header("Content-Transfer-Encoding: binary"); 
header('Content-Length: '. filesize($filename)); 

// Put either file counting code here. either a db or static files 

// 

readfile($filename); //and spit the user the file 


function base64_url_decode($input) { 
    return base64_decode(strtr($input, '-_,', '+/=')); 
} 

而當你調用文件使用類似:?

function base64_url_encode($input) { 
    return strtr(base64_encode($input), '+/=', '-_,'); 
} 

http://us.php.net/manual/en/function.base64-encode.php

如果您使用的是一些JavaScript或一個Flash播放器(例如JW播放器)需要實際鏈接爲mp3文件或其他內容,您可以附加文本「& type = .mp3」,以便最終的連接變成如下所示: 「www.example.com/ xfer.php?文件= 34842 ffjfjxfh & type = .mp3「。這樣,它看起來像一個MP3擴展結束,而不會影響文件鏈接。

+17

此腳本中存在目錄遍歷漏洞!攻擊者可以通過xfer.php?file = ../../../passwd或其他任何他們想要的東西!小心!!! – 2008-09-22 04:36:40

6

播放鏈接是一個鏈接到實際的mp3文件還是一些JavaScript代碼彈出播放器?

如果是後者,你可以很容易地在裏面添加自己的日誌記錄代碼來跟蹤點擊它的數量。

如果是前者,您需要一些可以跟蹤Web服務器日誌本身並做出區分的東西。我的託管計劃附帶webalizer,這很好地做到了這一點。

10

你甚至可以建立一個Apache的.htaccess指令,* .MP3請求轉換成查詢字符串dubayou正在與。這可能是保持直接請求並且仍然能夠將日誌功能附加到響應中的一種優雅方式。

2

是否有你的音樂庫數據庫?如果在下載mp3時有任何服務器代碼運行,那麼您可以在其中添加額外的代碼來增加播放次數。您也可以讓JavaScript發出第二次請求來增加播放次數,但這可能會導致人/機器人錯誤地增加計數。

我曾經爲互聯網廣播網站工作,我們用單獨的表格來跟蹤每首歌曲播放的時間。我們的流由一個運行icecast的perl腳本提供動力,所以每次開始播放一首新曲目時,我們都會觸發數據庫請求。然後爲了計算播放次數,我們將運行查詢來計算歌曲ID在播放日誌中的次數。

11

如果你的歌曲/二進制文件是由apache提供的,你可以很容易地grep access_log來找出下載的次數。一個簡單的後logrotate腳本可以grep日誌和維護你的計數統計數據庫。 由於不在您的實時請求代碼路徑中,因此具有性能優勢。將諸如統計離線等非關鍵事項做爲脫機是將網站擴展到大量用戶的好主意。

20

使用bash:

grep mp3 /var/log/httpd/access_log | wc 
2

我有東西像AWStats的問題/通過Web服務器日誌閱讀是大的下載往往可以在日誌中的數據塊被分割。這使得很難下載確切的下載數量。

我建議Google Analytics(分析)Event Tracking,因爲每次點擊下載鏈接時都會註冊一次。