2008-08-01 31 views
65

Mam stronę internetową odtwarzającą pliki MP3 w odtwarzaczu flash. Jeśli użytkownik kliknie przycisk "Odtwórz", odtwarzacz Flash automatycznie pobierze plik MP3 i rozpocznie odtwarzanie.Jak śledzić pobieranie plików?

Czy istnieje łatwy sposób śledzenia, ile razy dany plik utworu (lub dowolny plik binarny) został pobrany?


odnośnikiem zabaw link do rzeczywistego pliku mp3 lub niektóre kodu JavaScript że wyskakuje odtwarzacz?

Jeśli to drugie, można łatwo dodać swój własny kod logowania tam, aby śledzić liczbę trafień do .

Jeśli jest to pierwsze, musisz coś , który może śledzić dziennik serwera WWW się i dokonać tego rozróżnienia. Mój plan hostingowy jest dostarczany z webalizerem, , który to ładnie to robi.

To kod javascript, więc odpowiedzi na to.

Jednak byłoby miło wiedzieć, jak śledzić pobieranie przy użyciu innej metody (bez przełączania hostów).

Odpowiedz

39

Zabawne jest to, że 2 dni temu napisałem galerię multimediów dla php dla całej mojej muzyki. Miałem podobny problem. Używam odtwarzacza http://musicplayer.sourceforge.net/. Lista odtwarzania jest budowana za pomocą php. Wszystko prośba muzyka tam skrypt o nazwie xfer.php file = COKOLWIEK

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

A kiedy zadzwonić pliki używać coś takiego:

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

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

Jeśli używasz niektóre javascript lub flash player (na przykład odtwarzacz JW), który wymaga, aby rzeczywiste łącze było plikiem mp3 lub cokolwiek innego, można dołączyć tekst "& type = .mp3", aby ostateczny link stał się czymś w rodzaju: "www.example.com/ xfer.php? file = 34842 ffjfjxfh & type = .mp3 ". Wygląda na to, że kończy się rozszerzeniem mp3 bez wpływu na łącze do pliku.

+17

W tym skrypcie występuje usterka katalogu traversal! Osoba atakująca może przekazać w pliku xfer.php? File = ../../../passwd lub cokolwiek innego chcą! Bądź ostrożny!!! –

+4

spowoduje to zwiększenie limitów pamięci serwera, jeśli pliki są zbyt duże, a ruch jest wysoki. Coś, czego sam doświadczyłem. – tmsimont

+0

jak naprawić lukę "directory traversal"? – anarchOi

6

Czy link do odtwarzacza jest linkiem do rzeczywistego pliku mp3 lub do kodu javascript, który wyskakuje z odtwarzacza?

Jeśli to drugie, można łatwo dodać swój własny kod logowania, aby śledzić liczbę trafień do niego.

Jeśli jest to pierwsze, potrzebujesz czegoś, co może śledzić dziennik serwera sieciowego i dokonać tego rozróżnienia. Mój plan hostingowy pochodzi z webalizera, który ładnie to robi.

10

Można nawet ustawić dyrektywę Apache .htaccess, która konwertuje żądania * .mp3 na querystring dubayou, z którymi pracuje. Może to być elegancki sposób na zachowanie bezpośredniej prośby i wciąż możliwość wrzucenia funkcji logu do odpowiedzi.

2

Czy istnieje baza danych dla biblioteki muzycznej?Jeśli istnieje kod serwera uruchamiany podczas pobierania mp3, możesz dodać dodatkowy kod, aby zwiększyć liczbę odtworzeń. Możesz również poprosić javascript o drugą prośbę o zwiększenie liczby odtworzeń, ale może to spowodować, że liczba osób/robotów będzie fałszywie rosnąć.

Kiedyś pracowałem na stronie internetowej radia internetowego i używaliśmy oddzielnych tabel do śledzenia czasu odtwarzania każdej piosenki. Nasze strumienie były zasilane przez skrypt perlowy prowadzący icecast, więc uruchomiliśmy żądanie bazy danych za każdym razem, gdy zaczęła się nowa ścieżka. Następnie, aby obliczyć liczbę odtworzeń, uruchomimy zapytanie, aby zliczyć, ile razy identyfikator utworu był w logu gry.

11

Jeśli Twój plik/plik binarny był obsługiwany przez Apache, możesz łatwo przejść do access_log, aby sprawdzić liczbę pobrań. Prosty skrypt po skasowaniu może przeglądać dzienniki i utrzymywać statystyki liczników w bazie danych. Ma to przewagę pod względem wydajności, ponieważ nie jest w ścieżce na żądanie. Robienie niekrytycznych rzeczy, takich jak statystyki offline, jest dobrym pomysłem na skalowanie witryny do dużej liczby użytkowników.

20

Użyj bash:

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

Problem miałem z rzeczy jak AWStats/czytania logów serwera WWW jest to, że duże pliki do pobrania często można podzielić na porcje danych w logach. To sprawia, że ​​dość trudno jest pogodzić dokładną liczbę pobrań.

Proponuję Google Analytics Event Tracking, ponieważ zarejestruje się on raz na kliknięcie linku pobierania.