Frage

Wie kann ich einen Zähler anzeigen, die die Anzahl der eine Datei heruntergeladen wird zählt? Ich habe es schon einmal gesehen. „Heruntergeladen 450 mal“. Danke.

War es hilfreich?

Lösung

Sie den Benutzer nicht zulassen, eine Datei direkt herunterladen, aber durch ein Skript wie die folgenden ...

<?php

   $file = $_REQUEST['file'];
   $dldir = "downloads/";

   if (
       (file_exists($dldir.$file) &&               // file exists
       (strpos($file, "../") === false) &&  // prevent an attacker from switching to a parent directory
      ) {

       header('Content-type: '.mime_content_type($dldir.file));
       header("Content-Transfer-Encoding: binary");
       header("Content-Length: " . filesize($dldir.$file) ."; "); 
       header('Content-Disposition: attachment; filename="'.$file.'"');

       echo file_get_contents($dldir.$file);

       /** Update the counter here, e.g. by using mysql **/
   } else {
       die("File not found");
   }

?>

Andere Tipps

Wenn Sie es mit PHP tun möchten, müssen Sie den Download in einem PHP-Skript steuern. Grundsätzlich kommt es auf die folgenden zwei Zeilen von Pseudo-Code:

set_number_of_downloads(get_number_of_downloads() + 1);
readfile($file_being_downloaded);

Es Sie gehen. Auch, wenn Sie MySQL lieber mit für Ausdauer, gibt es diese Lösung.

Auf Apache können Sie eine Datenbank mod_rewrite Update haben, wenn die Datei angefordert wird. Dies hat den Vorteil der Geschwindigkeit beim Senden (sendfile verwendet werden kann), und Sie müssen nicht Ihre URLs oder Verzeichnisstruktur ändern.

#!/usr/bin/perl
$| = 1;
$dbh = DBI->connect("dbi:mysql:database=; host=localhost; user=; password=")
or die "Connecting from PHP to MySQL database failed: $DBI::errstr";
while (<STDIN>) {
    $dbh->query(... update database ...);
    print $_;
}

http://httpd.apache.org/docs/2.2 /mod/mod_rewrite.html#rewriteengine

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top