Wie verfolge ich Dateidownloads?


79

Ich habe eine Website, die MP3s in einem Flash-Player abspielt. Wenn ein Benutzer auf "Abspielen" klickt, lädt der Flash Player automatisch eine MP3-Datei herunter und beginnt mit der Wiedergabe.

Gibt es eine einfache Möglichkeit zu verfolgen, wie oft ein bestimmter Songclip (oder eine Binärdatei) heruntergeladen wurde?


Ist der Wiedergabelink ein Link zur eigentlichen MP3-Datei oder zu einem Javascript-Code, der einen Player öffnet?

In letzterem Fall können Sie dort ganz einfach Ihren eigenen Protokollcode hinzufügen, um die Anzahl der Treffer zu verfolgen.

In ersterem Fall benötigen Sie etwas, mit dem das Webserverprotokoll selbst verfolgt und diese Unterscheidung getroffen werden kann. Mein Hosting-Plan kommt mit Webalizer, was dies gut macht.

Es ist ein Javascript-Code, der darauf antwortet.

Es wäre jedoch schön zu wissen, wie Downloads mit der anderen Methode verfolgt werden können (ohne den Host zu wechseln).

Antworten:


39

Das Lustige ist, dass ich vor 2 Tagen eine PHP-Mediengalerie für alle meine Musik geschrieben habe. Ich hatte ein ähnliches Problem. Ich verwende http://musicplayer.sourceforge.net/ für den Player. Und die Wiedergabeliste wird über PHP erstellt. Alle Musikanfragen gehen an ein Skript namens xfer.php? File = WHATEVER

$filename = base64_url_decode($_REQUEST['file']);
header("Cache-Control: public");
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, '-_,', '+/='));
}

Und wenn Sie Dateien aufrufen, verwenden Sie Folgendes:

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

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

Wenn Sie JavaScript oder einen Flash-Player (z. B. JW-Player) verwenden, für den der eigentliche Link einer MP3-Datei oder was auch immer erforderlich ist, können Sie den Text "& type = .mp3" anhängen, sodass der endgültige Link wie folgt lautet: "www. example.com/xfer.php?file=34842ffjfjxfh&type=.mp3 ". Auf diese Weise sieht es so aus, als würde es mit einer MP3-Erweiterung enden, ohne den Dateilink zu beeinflussen.


19
In diesem Skript gibt es eine Sicherheitsanfälligkeit bezüglich Verzeichnisüberquerung! Ein Angreifer kann xfer.php übergeben? File = .. / .. / .. / passwd oder was auch immer sie wollen! Achtung!!!
Alex Weinstein

6
Dies wird die Speicherbeschränkungen des Servers sprengen, wenn die Dateien zu groß sind und Ihr Datenverkehr hoch ist. Etwas, das ich selbst erlebt habe.
tmsimont

Wie behebt man die "Directory Traversal-Sicherheitsanfälligkeit"?
Jon87

@anarchOi: Der einfachste Weg wäre, den GET-Parameter ( $_REQUEST['file']) mit einer Whitelist von bekanntermaßen guten Dateinamen zu vergleichen . Zum Beispiel eine Liste aller Dateien in dem Verzeichnis, in dem Sie Ihre Dateien speichern. Stellen Sie sicher , dass Sie nur das Verzeichnis verwenden , zum Speichern von Dateien Sie heruntergeladen werden sein wollen ...
BlueRaja - Danny Pflughoeft

@tmsimont, Haben Sie Möglichkeiten gefunden, den Speicherverbrauch zu senken?
Ezpresso


25

Bash verwenden:

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

13

Wenn Ihr Song / Ihre Binärdatei von Apache bereitgestellt wurde, können Sie das access_log leicht durchsuchen, um die Anzahl der Downloads zu ermitteln. Ein einfaches Skript nach dem Protokollieren kann die Protokolle erfassen und Ihre Zählstatistiken in einer Datenbank verwalten. Dies hat den Leistungsvorteil, da Sie sich nicht in Ihrem Live-Anforderungscodepfad befinden. Unkritische Dinge wie Statistiken offline zu machen, ist eine gute Idee, um Ihre Website auf eine große Anzahl von Benutzern zu skalieren.


12

Sie können sogar eine Apache .htaccess-Direktive einrichten, die * .mp3-Anforderungen in den Querystring konvertiert, mit dem Dubayou arbeitet. Dies ist möglicherweise eine elegante Möglichkeit, die direkte Anforderung beizubehalten und dennoch die Slipstream-Protokollfunktion in die Antwort einzubeziehen.


6

Ist der Wiedergabelink ein Link zur eigentlichen MP3-Datei oder zu einem Javascript-Code, der einen Player öffnet?

In letzterem Fall können Sie dort ganz einfach Ihren eigenen Protokollcode hinzufügen, um die Anzahl der Treffer zu verfolgen.

In ersterem Fall benötigen Sie etwas, mit dem das Webserverprotokoll selbst verfolgt und diese Unterscheidung getroffen werden kann. Mein Hosting-Plan kommt mit Webalizer, was dies gut macht.


3

Gibt es eine Datenbank für Ihre Musikbibliothek? Wenn beim Herunterladen der MP3-Datei ein Servercode ausgeführt wird, können Sie dort zusätzlichen Code hinzufügen, um die Anzahl der Wiedergaben zu erhöhen. Sie könnten auch Javascript eine zweite Anfrage stellen lassen, um die Anzahl der Spiele zu erhöhen, aber dies könnte dazu führen, dass Personen / Roboter die Anzahl fälschlicherweise erhöhen.

Ich habe für eine Internet-Radio-Site gearbeitet und wir haben separate Tabellen verwendet, um die Zeit zu verfolgen, zu der jedes Lied gespielt wurde. Unsere Streams wurden von einem Perl-Skript mit Icecast unterstützt, sodass wir jedes Mal eine Datenbankanforderung auslösten, wenn ein neuer Titel abgespielt wurde. Um dann die Anzahl der Wiedergaben zu berechnen, führten wir eine Abfrage durch, um zu zählen, wie oft sich die ID eines Songs im Wiedergabeprotokoll befand.


3

Das Problem, das ich mit Dingen wie AWStats / Lesen von Webserver-Protokollen hatte, ist, dass große Downloads häufig in Datenblöcke innerhalb der Protokolle aufgeteilt werden können. Dies macht es ziemlich schwierig, die genaue Anzahl der Downloads abzustimmen.

Ich würde die Google Analytics- Ereignisverfolgung vorschlagen , da diese einmal pro Klick auf einen Download-Link registriert wird.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.