PHP - Anzahl der mal heruntergeladen
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.
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);
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