Wie verfolge ich Datei-Downloads?

Lesezeit: 4 Minuten

Benutzer-Avatar
Gewähren

Ich habe eine Website, die MP3s in einem Flash-Player abspielt. Wenn ein Benutzer auf „Play“ 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 beliebige Binärdatei) heruntergeladen wurde?


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

Wenn letzteres der Fall ist, können Sie einfach Ihren eigenen Protokollierungscode hinzufügen, um die Anzahl der Zugriffe darauf zu verfolgen.

Im ersten Fall benötigen Sie etwas, das das Webserverprotokoll selbst verfolgen und diese Unterscheidung treffen kann. Mein Hosting-Plan wird mit Webalizer geliefert, was dies gut macht.

Es ist ein Javascript-Code, der das beantwortet.

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

Benutzer-Avatar
w-ll

Das Lustige ist, dass ich vor 2 Tagen eine PHP-Mediengalerie für alle meine Musikstücke geschrieben habe. Ich hatte ein ähnliches Problem. Ich benutze http://musicplayer.sourceforge.net/ für den Spieler. 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 so etwas wie:

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, der den tatsächlichen Link einer MP3-Datei oder was auch immer erfordert, können Sie den Text „&type=.mp3“ anhängen, sodass der endgültige Link so etwas wie „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.

  • In diesem Skript gibt es eine Directory-Traversal-Schwachstelle! Ein Angreifer kann xfer.php?file=../../../passwd oder was auch immer er will weitergeben! Vorsichtig sein!!!

    – Alex Weinstein

    22. September 2008 um 4:36 Uhr

  • Dies sprengt die Speichergrenzen des Servers, wenn die Dateien zu groß sind und Ihr Datenverkehr hoch ist. Das habe ich selbst erlebt.

    – tmsimont

    8. Juli 2011 um 17:17 Uhr

  • Wie behebt man die “Directory Traversal Vulnerability”?

    – Jon87

    18. Juni 2013 um 0:49 Uhr

  • @anarchOi: Der einfachste Weg wäre, den GET-Parameter zu vergleichen ($_REQUEST['file']) gegen eine Whitelist bekanntermaßen fehlerfreier Dateinamen. Beispielsweise eine Auflistung aller Dateien in dem Verzeichnis, in dem Sie Ihre Dateien speichern. Stell sicher, dass du nur Verwenden Sie dieses Verzeichnis zum Speichern von Dateien, die Sie herunterladen möchten …

    – BlueRaja – Danny Pflughöft

    14. November 2013 um 2:34 Uhr


  • @tmsimont, hast du Möglichkeiten gefunden, den Speicherverbrauch zu senken?

    – Espresso

    21. August 2017 um 22:55 Uhr

Benutzer-Avatar
Tim Boland

Verwenden Sie Ihre httpd-Protokolldateien. Installieren http://awstats.sourceforge.net/

Bash verwenden:

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

  • Diese Methode hat mindestens zwei Fehler: Sie zählt GET- und HEAD-Anforderungen und alle HTTP-Antwortcodes. Beispielsweise kann es viele 206-Antworten geben, die dazu führen, dass Sie die Downloads überschätzen.

    – 8 Tintenfisch

    4. Dezember 2020 um 6:29 Uhr

Wenn Ihr Song / Ihre Binärdatei von Apache bereitgestellt wurde, können Sie einfach das access_log abrufen, um die Anzahl der Downloads herauszufinden. Ein einfaches Post-Logrotate-Skript kann die Protokolle abrufen und Ihre Zählstatistiken in einer Datenbank verwalten. Dies hat den Leistungsvorteil, dass es sich nicht in Ihrem Live-Anforderungscodepfad befindet. Unkritische Dinge wie Statistiken offline zu machen, ist eine gute Idee, um Ihre Website auf eine große Anzahl von Benutzern zu skalieren.

Sie könnten sogar eine Apache .htaccess-Direktive einrichten, die *.mp3-Anfragen in den Querystring umwandelt, mit dem dubayou arbeitet. Es könnte eine elegante Möglichkeit sein, die direkte Anfrage beizubehalten und dennoch die Slipstream-Protokollfunktion in die Antwort einzufügen.

Benutzer-Avatar
Dillie-O

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

Wenn letzteres der Fall ist, können Sie einfach Ihren eigenen Protokollierungscode hinzufügen, um die Anzahl der Zugriffe darauf zu verfolgen.

Im ersten Fall benötigen Sie etwas, das das Webserverprotokoll selbst verfolgen und diese Unterscheidung treffen kann. Mein Hosting-Plan wird mit Webalizer geliefert, was dies gut macht.

Benutzer-Avatar
Mike H

Gibt es eine Datenbank für Ihre Musikbibliothek? Wenn es einen Servercode gibt, der beim Herunterladen der MP3-Datei ausgeführt wird, können Sie dort zusätzlichen Code hinzufügen, um die Anzahl der Wiedergaben zu erhöhen. Sie könnten Javascript auch eine zweite Anfrage stellen lassen, um die Anzahl der Spiele zu erhöhen, aber dies könnte dazu führen, dass Menschen/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 jeder Song gespielt wurde. Unsere Streams wurden von einem Perl-Skript betrieben, auf dem Icecast ausgeführt wurde, sodass wir jedes Mal, wenn ein neuer Titel zu spielen begann, eine Datenbankanfrage auslösten. Um dann die Anzahl der Wiedergaben zu berechnen, würden wir eine Abfrage ausführen, um zu zählen, wie oft die ID eines Songs im Wiedergabeprotokoll enthalten war.

1352360cookie-checkWie verfolge ich Datei-Downloads?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy