PHP Download-counter Script

Manchmal will man einfach nur zählen, wie oft ein Programm oder ein Archiv heruntergeladen wird. Häufig will man auch verhindern, dass ein direkter Download von einer fremden Seite möglich ist. Ein erstaunlich kurzes Script schafft Abhilfe.

Das PHP Script

PHP Download Counter
<?php
/*
* Downloadcounter Kontrollscript
* Author Dirk Hoeschen (hoeschen at feenders.de)
*/

$path="./downloads/";
// hole dateinamen aus variable f
$f = strip_tags($_GET['f']);
if ($f!="") {
// ganzes verzeichnis lesen
$dir_handle = @opendir($path) or die("Unable to open ".$path);
while ($file = readdir($dir_handle)) {
if (!is_dir($file)) {
if ($file==$f) {
rename($path.$file,$path."0:0:".$file);
$file = "0:0:".$file;
}
// datei in array splitten
$fparts = split(':',$file);
if ((count($fparts)>1) && ($fparts[2]==$f)) {
// counter+1, zufallswert ermitteln, datei umbenenenn
$dlcount = intval($fparts[0])+1;
$frandom = hash("md5",microtime());
$newfilename=$dlcount.":".$frandom.":".$f;
rename($path.$file,$path.$newfilename);
break;
}
}
}

// datei mit dem ursprünglichen namen ausgeben
if ($newfilename!="") {
header('Content-type: application/zip');
header('Content-Disposition: attachment; filename="'.$f.'"');
header("Content-Transfer-Encoding: binary");
readfile($path.$newfilename);
}

}

?>

 

Wie funktioniert es?

Dem Downloadscript wird über die Variable "f" der gewünschte Dateiname übermittelt. Das Script sucht nun im Unterordner "downloads" nach der Datei. Die Datei ist nach folgendem Muster gespeichert: ZÄHLER:HASH:DATEINAME.

Die Teile zwischen dem ":" werden aufgesplittet. Der Zähler wird um eins erhöht, ein neuer hashwert genriert und die Datei umbenannt.

Dadurch ist ein Download der Datei nur über das Script möglich. Zusätzlich kann man über den Dateinamen ermitteln, wie oft die Datei heruntergeladen wurde.

Zugriffsbeschränkung

Bis jetzt funktioniert unser Script nur als Zähler. Außerdem verhindert es den direkten Download.

Wenn das Script in einem passwortgeschützten Bereich liegt oder über die Sessionvariable auswertet, ob ein Benutzer angemeldet ist, kann es leicht dazu dienen, dass ein Download nur nach einer vorherigen Benutzeranmeldung möglich ist.

 

 

Kommentar hinzufügen

E-Mail: Für Antworten. Wird nicht angezeigt.
  Sicherheitscode zur Prüfung. Nur Kleinschreibung. Keine Leerzeichen.
Kommentare (2)
Re: Danke
20. Juli 2010
Joest Feenders
Hi Waisenbach,
naja - so wie im Script angegeben schon. Aber mit minimaler Modifikation: -> header('Content-type: application/zip') - ziemlich am Ende des Scriptes - ist das ja leicht entsprechend Deinen Wünschen anzupassen ;-)
Ciao Joest
Danke....
19. Juli 2010
Waisenbach
Wirklich nette Idee. Einfach und doch effektiv.

eins jedoch...

Das Beispiel funktioniert nur mit zip Archiven
 

Christiania Bikes – Lastenräder individuell konfigurieren
Seit über 30 Jahren gibt es die Lastenräder aus Dänemark. Egal... weiter

Der Fall Kurras und die Stasi - Microsite
Das erste Buch zum Fall des enttarnten Stasi-Spitzels Karl-Heinz... weiter

Bebraverlag - Verlagsseite
Das Webangebot des be•bra Verlages (www.bebraverlag.de) wurde... weiter

Bebraverlag - Verlagsseite