2008-08-01 10 views
65

私はフラッシュプレーヤーでmp3を再生するウェブサイトを持っています。ユーザーが「再生」をクリックすると、フラッシュプレーヤーは自動的にmp3をダウンロードし、再生を開始します。ファイルのダウンロードを追跡するには

特定の曲のクリップ(またはバイナリファイル)が何回ダウンロードされたかを簡単に追跡する方法はありますか?


実際 mp3ファイルまたはプレーヤーがポップアップいくつかのJavaScriptコード へのリンクプレーリンクですか?

後者の場合は、 独自のログコードを簡単に追加して、 ヒット数を追跡​​できます。

前者の場合は、Webサーバログ 自体を追跡してその区別をつけることができる何か が必要です。私の ホスティングプランにはこれをうまくやってくれるwebalizer、 が付属しています。

これはその答えです。

しかし、(ホストを切り替えることなく)他の方法を使用してダウンロードを追跡する方法を知っているとよいでしょう。

答えて

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, '-_,', '+/=')); 
} 

そして、あなたはファイルを呼び出すようなものを使用:?あなたには、いくつかのJavaScriptを使用している場合

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

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

か実際のリンクをmp3ファイルなどにする必要があるフラッシュプレーヤー(JWプレーヤーなど)では、テキスト "& type = .mp3"を追加することができます。最後のlinkeは "www.example.com/ xfer.php?file = 34842 ffjfjxfh &タイプ= .mp3 "。そうすれば、ファイルリンクに影響を与えることなくmp3拡張子で終わるように見えます。

+17

このスクリプトにはディレクトリトラバーサルの脆弱性が存在します。攻撃者は、xfer.php?file = ../../../passwdやその他の必要なものを渡すことができます!注意してください!!! –

+4

ファイルが大きすぎてトラフィックが多い場合は、サーバーのメモリ制限が爆発します。 – tmsimont

+0

"ディレクトリトラバーサル脆弱性"の修正方法? – anarchOi

6

プレイリンクは、実際のmp3ファイルまたはプレーヤーをポップアップさせるJavaScriptコードへのリンクですか?

後者の場合は、独自のログコードを簡単に追加して、ヒット数を追跡​​できます。

前者の場合、Webサーバーのログ自体を追跡してその区別をすることができるものが必要です。私のホスティングプランにはwebalizerが付属しています。これはうまくいきます。

10

* .mp3要求をdubayouが動作しているクエリ文字列に変換するApache .htaccess指令を設定することさえできます。これは、直接要求を維持し、依然としてログ機能を応答に流すことができるエレガントな方法です。

2

音楽ライブラリ用のデータベースはありますか?mp3をダウンロードするときに実行されるサーバーコードがあれば、余分なコードを追加して再生回数を増やすことができます。また、javascriptで再生回数を増やすように2回目のリクエストを行うこともできますが、これによって人やロボットがカウントを間違って増やす可能性があります。

私はインターネットラジオのサイトで働いていましたが、私たちは別のテーブルを使用して曲が再生された時間を記録しました。私たちのストリームは、icecastを実行するperlスクリプトによって強化されていたので、新しいトラックが再生されるたびにデータベースリクエストをトリガーしました。次に、再生回数を計算するために、再生ログに曲のIDが何回あるかをカウントするクエリを実行します。

11

あなたのソング/バイナリファイルがApacheによって提供された場合は、access_logを簡単にgrepしてダウンロード数を調べることができます。シンプルなログ復帰後スクリプトは、ログをグレープして、データベース内のカウント統計を維持することができます。 ライブリクエストコードのパスにないため、パフォーマンス上の利点があります。統計情報をオフラインにするなど重要ではないことを行うことは、ウェブサイトを多数のユーザーに拡大することをお勧めします。

20

使用のbash:

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

私は、Webサーバーのログを読んAWStatsの/のようなものとしていた問題は、大きなダウンロードは、多くの場合、ログ内のデータチャンクに分割することができるということです。これにより、ダウンロードの正確な数を非常に難しくすることができます。

私はGoogle Analytics Event Trackingをお勧めします。これは、ダウンロードリンクに1回クリックすると登録されます。

関連する問題