3 Stimmen

Wie lassen sich Downloads am besten transparent protokollieren?

Ich habe ein persönliches Projekt, das schon seit einiger Zeit online ist. Ich habe eine Liste der Downloads erstellt, indem ich dies getan habe:

  • Wenn der Benutzer auf den Download-Link klickt, wird ein PHP-Skript aufgerufen, das einige Informationen in eine Tabelle schreibt.
  • Sobald die Daten geschrieben sind, gibt das Skript den Pfad zur eigentlichen Datei zurück.
  • Der Nutzer hat dann die Möglichkeit, die Datei auf seiner Festplatte zu speichern, als wäre es ein beliebiger anderer Download.

Dies hat eine Zeit lang gut funktioniert, verhindert jedoch, dass die Nutzer die Möglichkeit haben right-click > save target as... weil sie tatsächlich nur sehen werden download.php im Dialog "Datei speichern " erscheinen. Die einzige Möglichkeit, das Projekt herunterzuladen, besteht also darin, mit der linken Maustaste auf den Link zu klicken.

Ich möchte das Verfahren so verbessern, dass ein Benutzer das Projekt mit der Methode herunterladen kann, mit der er am besten zurechtkommt. Welche Möglichkeiten gibt es also, Downloads transparent zu protokollieren, ohne den Benutzer zu behindern?

Wenn es etwas wert ist Der Rechner ist ein Standard-LAMP-Stack, also keine .NET-Optionen.

3voto

Georg Schölly Punkte 120083

Dies stammt aus der php-Dokumentation aber auch mit anderen Schriftsprachen möglich ist:

<?php
// We'll be outputting a PDF
header('Content-type: application/pdf');

// It will be called downloaded.pdf
header('Content-Disposition: attachment; filename="downloaded.pdf"');

// The PDF source is in original.pdf
readfile('original.pdf');
?>

Der HTTP-Header Content-Disposition gibt an, dass er als Download gespeichert werden soll.

Eine andere Möglichkeit wäre, die Protokolldateien regelmäßig, z. B. jeden Tag, mit Hilfe eines Skripts zu überprüfen.

1voto

alxp Punkte 5876

Aus diesem Grund verwenden viele Websites einen Download-Link, der zu einer anderen Seite führt, die automatisch einen Download startet, wenn die Seite geladen wird, und dem Benutzer einen Link zum direkten Download bietet. Meistens ist dies ein Weg, um Seitenaufrufe für Werbeeinblendungen zu erhalten, aber es hilft auch, leichter zu verfolgen, wer seine Dateien herunterlädt.

1voto

Grant Punkte 11649

Diese Antwort beschreibt, wie man eine Übertragungsseite verwendet, um den Download zu protokollieren und den Download der Datei zu starten, sobald jemand auf den Link klickt. Ich habe es kürzlich für Rechtsklicks getestet.

Ich verwende einen php-Middleman, um Dateidownloads zu protokollieren. Eine URL im Format http://192.168.1.1/xfer.php?file=Li9zb25ncy9HTE9XX0xlYXZlIFlvdXIgSGF0IE9uLm1wMw ergibt den Dateinamen sowohl für Speichern unter... als auch für Linksklick in Firefox.

Hier ist meine xfer.php

<?
$filename = base64_url_decode($_GET['file']);
if ($_GET['file']){
    header("Cache-Control: public");
    header("Content-Description: File Transfer");
    header('Content-disposition: attachment; filename='.str_replace(" ", "_",basename($filename)));
    header("Content-Transfer-Encoding: binary");
    header('Content-Length: '. filesize($filename));
    readfile($filename);
}
$fh = fopen("test.html","a");
fwrite($fh,basename($filename)."\n<br />");
fclose($fh);
function base64_url_decode($input) {
    return base64_decode(strtr($input, '-_,', '+/='));
}
?>

Und die Seite, die auf xfer.php verweist, lautet

$link = "xfer.php?file=".base64_url_encode("./songs/$key");

mit $key ist der Dateiname und songs ist der Ordner, in dem die Dateinamen gespeichert werden.

1voto

nailitdown Punkte 7715

Google Analytics einrichten? :)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X