Download Counter

Hi, bin neu hier und nich sooo bewandert in html, php usw…

'N Kumpel von mir hat mir mit Filezilla und bplaced alles eingerichtet damit ich Daten hochladen kann und zum Download online stellen kann.
Jetzt wollte ich aber gerne wissen ob ich irgendwie, irgendwo einen Download Counter einbauen kann, damit ich sehen kann wie oft die Datein geladen wurden. (Einen der für alle zählt, wenn’s geht?!)
Hab schon gesucht hier im Forum aber nichts gefunden bzw. verstanden !coffee
Google gab mir das hier drweb.de/magazin/sicherer-do … r-mit-php/
Aber ich hab kein Plan wie das funktionieren soll bzw. wo ich was einsetzen soll?!
Hoffe mir kann jemand helfen?!

Vielen Dank…

Hi,

hier hab ich kurz geschriebn, der zählt die Downloads und packt den Counterwert in eine externe Datei. Du musst ein Verzeichnis namens “downloads” erstellen, in das packst du die Datei zum Downloaden z.B. “bild.jpg” und die Counterwert Datei “bild.jpg.db”. Jede Datei zum Downloaden muss eine einzelne Datenbankdatei haben, immer nach dem schema “downloaddatei.db”.

<?php

$download=$_GET['id'];

if (file_exists("downloads/".$download.".db") && file_exists("downloads/".$download))
	{
	$file=file_get_contents("downloads/".$download.".db");
	$file++;
	file_put_contents("downloads/".$download.".db", $file);
	header("Content-Type: application/octet-stream");
	header("Content-Disposition: attachment; filename=".$download);
	readfile("downloads/".$download);
	}

?>

Wenn du jetzt eine Datei herunterladen willst gibst du einfach in der Adressleiste ein:

Bei jedem Download wird der Wert in der “bild.jpg.db” erhöht. Der Skript lässt sich natürlich noch genauer auf deine Wünsche anpassen…

MfG, xcube

Hey,

mich interessiert es, was die einzelnen Zeilen bedeuten…wärst du so nett und könntest die kommentieren was die machen?

Grüße

Hmm naja ok … so schwer ist der Skript ja nit:

<?php

$download=$_GET['id']; //liest URL id aus

if (file_exists("downloads/".$download.".db") && file_exists("downloads/".$download)) //prüft ab db-datei und download-datei existiert
   {
   $file=file_get_contents("downloads/".$download.".db"); //liest db-datei aus
   $file++; //erhöht counterwert
   file_put_contents("downloads/".$download.".db", $file); //schreibt neuen counterwert in db-datei
   header("Content-Type: application/octet-stream"); //sendet dem browser die info, dass es sich um einen download handelt
   header("Content-Disposition: attachment; filename=".$download); //sendet dem browser die datei
   readfile("downloads/".$download); //gibt Datei aus
   }

?>

Ok?

MfG, xcube

Huhu

naja immer noch nicht so aufschlussreich für ein PHP-Anfänger…

Ich wollte eigentlich wissen was die Funktionen heißen…

grüße

Oh, cool…vielen Dank!
Wo muss ich den „Download Ordner“ denn erstellen? Bei Filezilla?
Und wo muss der Code denn hin? :red:

[quote=„sencire“]Oh, cool…vielen Dank!
Wo muss ich den „Download Ordner“ denn erstellen? Bei Filezilla?
Und wo muss der Code denn hin? :red:[/quote]
Du musst eine php datei erstellen und die dann im normalen verzeichniss kopieren und dann noch einen ordner(in FIlezilla) mit dem namen download erstellen.

So sollte es klappen!

Grüße

[quote=„sencire“]Wo muss ich den „Download Ordner“ denn erstellen? Bei Filezilla?[/quote] Jap.

[quote=„sencire“]Und wo muss der Code denn hin? :red:[/quote] Am besten in eine mit .php endende Datei. !haue

Noch besser ist es aber, wenn Du dich erst mal mit dem Thema PHP beschäftigst. :wink:

Weil ich darum gebeten wurde :slight_smile:

file_exists($dateipfad)
fragt ab ob der angegebene Dateipfad existiert.
wird hier zweimal in der if-Abfrage verwendet, und mit einem && (AND) verknüpft

file_get_contents($dateipfad)
liest den kompletten Inhalt der Datei in eine Variable

file_put_contents($dateipfad, $inhalt)
speichert den Inhalt der Variable im zweiten Parameter in die Datei die
im Dateipfad angegeben ist. Dabei wird der alte Dateiinhalt komplett überschrieben.

header($zeile)
ist eine Funktion welche verschiedene HTTP-Header Zeilen hinzufügt.
Da per HTTP nicht nut HTML Seiten versendet wird, sondenr auch Grafiken und alle
Möglichen anderen Dateien, kannm an hier sogar den Dateityp angeben.
Mehr zu HTTP gibts es auf Wikipedia de.wikipedia.org/wiki/HTTP

readfile($dateipfad)
Liest den gesamten Textinhalt aus der angegebenen Datei und fügt an der Stelle,
Wo die funktion angewendet wird, in die Ausgabe. (Binarysafe)

ich hoffe das hilft

mfg Balmung

Ahh dankeschön!!!

habs schon besser verstanden zwar noch nicht perfekt, aber das erwarte ich noch nicht von mir xDD

grüße

Übrigens würde ich neben Content-Type und Content-Disposition noch die DAteigröße mit Content-Length angeben:

$filesize = filesize("downloads/".$download); header("Content-Length: ".$filesize);
Sonst kommt der Webserver oder PHP oder wer auch immer dafür veranwortlich ist, auf die Idee die Datei per Transfer-Encoding: chunked zu senden, was dazu führt, dass der Browser nicht erkennt, wie lange der Download dauern wird.
Mit der Angabe der Dateigröße, kann der Browser die Wartezeit wie bisher anzeigen lassen.

Sehr schön, danke schonmal für die Hilfe.
Jetzt müsste ich nur noch wissen wie ich’ne php-Datei erstelle?! :hail:
Einfach in Word den Code kopieren und speichern und dann .php anhängen??

Also pack ich die php-Datei (wenn ich sie hätte) in mein normales Verzeichnis bei Filezilla, wo jetzt die Datein drinne sind. Mach dann einen Ordner der „Download“ heißt und schiebe die Datein da rein,ja?! (ohne die php)

du musst im editor den text einfügen und dann zB als Download.php nennen.

Grüße

:whata: Wie schnell ging das denn, danke!
Wie sieht der Code denn jetzt genau aus, mit dem was BALMUNG geschrieben hat?!
Muss das da unter oder direkt daneben? Und wo muss ich die Filegröße eintragen?
Sooorryyyy ich bin’n richtiger Anfänger…

und achte unbedingt auf Groß- und Kleinschreibung

Im PHP-Script auf der vorherigen Seite wurde der Ordner überall “downloads” genannt, also musst du den, wenn du den in FileZilla anlegst, auch haargenau so benennen.
Der Webspace ist ein Linux System (kein Windows), von daher ist die Unterscheidung zischen Groß- und Kleinschreibung wichtig.

Außerdem:
Du packst den PHP Code nicht in "Word"
sondern öffnest am besten den Editor (Start -> Zubehör -> Editor) und fügst dort den PHP Code ein.
beim Speichern wählst du erst unten bei Dateityp: “Alle Dateien” aus, und gibts ihm dann den Namen “download.php” oder was ähnliches.
Speicherst die Datei ab, und lädst sie dann wie du selber schon beschrieben hast, in das Verzeichnis hoch (per FileZilla).

Was du beim einfügen im Editor noch beachten musst:
vor dem “<?php” am Anfang des Script darf absolut kein Leerfeld, und keine leere Zeile sein.
sonst wird es einen Fehler wegen den “header()” Befehlen geben.
Und um keine eventuellen Probleme mit den downloads zu haben, sollte auch am Ende nach dem “?>” keinerlei Leerfelder oder Leerzeilen folgen.

EDIT:

[code]

<?php $download=$_GET['id']; if (file_exists("downloads/".$download.".db") && file_exists("downloads/".$download)) { $file=file_get_contents("downloads/".$download.".db"); $file++; file_put_contents("downloads/".$download.".db", $file); header("Content-Type: application/octet-stream"); header("Content-Disposition: attachment; filename=".$download); $filesize = filesize("downloads/".$download); header("Content-Length: ".$filesize); readfile("downloads/".$download); } ?>[/code]

mfg Balmung

:slight_smile: puhh alles klar, vielen dank.
Ich steig da aber immer noch nich ganz durch.
Ich hab’ne rar Datei die heißt Soundcheck EP. (Später kommt noch MukkeMixtape dazu)
Wo im Code muss ich denn Soundcheck EP einsetzen?
Und was is damit gemeint: "…in das packst du die Datei zum Downloaden z.B. “bild.jpg” und die Counterwert Datei “bild.jpg.db”???
Muss ich da noch ne Datei erstellen? Oder einfach nur so benennen im Code?
Und muss ich für jede Datei dann einen neuen Code nehmen??

Danke, hier wird einem ja echt mal geholfen…

nein
du lädst die datei, die du zum download freigeben willst, in den downloads ordner direkt hoch.

Dann erstellst du noch eine leere Datei (z.b. ein leeres Textdokument) und nennst die datei um und hängst noch als Erweiterung .db ran.

Damit das alles einwandfrei klappt, solltest du auf deinem windows System vielleicht die Dateierweiterungen einblenden:
Öffnest einen Order (irgendeinen, Arbeitsplatz, oder Eigene Dateien) und gehst oben im Menu auf: Extras -> Ordneroptionen…
Dann erscheint ein Fenster, in dem du oben auf den Reiter “Ansicht” wechselst.
Dann müsstest du einen Haufen auswahlmöglichkeiten sehen, wo du haken setzen kannst.
Du suchst raus: “Erweiterungen bei bekannten Dateitypen ausblenden” und entfernst den Haken, falls er gesetzt ist.
Drückst “OK” oder “Übernehmen”.
Jetzt sollten die Dateierweiterungen deiner Dateien zu sehen sein.

wenn du z.b. ein Bild hast, würde das Bild nicht mehr “Bild” heißen, sondern wahrscheinlich “Bild.jpg”

Hier noch mal die Vorgehensweise an einem Beispiel:

  • Du lädst Bild.jpg hoch in den downloads Ordner.
  • Erstellst eine Leere Datei die die dann in “Bild.jpg.db” benennst.
  • Diese lädst du in das selber Verzeichnis hoch (also auch in den downloads Ordner)

jetzt sollte deine Datei über den link:

erreichbar sein (“deinbplacedname” natürlich umändern).

du erstellst also für jede Datei, die du zum Download freigeben möchtest, eine zweite Datei, die genau so heißt wie die Datei, nur eben mit der zusätzlichen Erweiterung “.db”

mfg Balmung

Hi,

nein du musst nichts im PHP-Skript ändern, der ist ja dynamisch.
Du hast deine Datei „SoundcheckEP.rar“. Diese packst du in den Ordner „downloads“. Jetzt erstellst du mit deinem Editor eine Textdatei namens „SoundcheckEP.rar.db“ mit dem Inhalt 0. Diese kopierst du ebenfalls in den Ordner „downloads“.

Der Skript ist wie gesagt dynamisch, du musst nicht für jede Datei einen eigenen Skript schreiben. :p
Wenn du eine weitere Datei zum DL anbieten willst, angenommen „SoundcheckEP2.rar“ kopierst du sie auch in den „downloads“-Ordner und erstellst wieder eine Textdatei mit dem Inhalt 0. Diese heißt dann „SoundcheckEP2.rar.db

So alles klar? :wink:

// Edit: Balmung war schneller :ps:

So ich habe meinen Ordner bei Filezilla da is noch so’ne ftpqouta datei drinn.
Noch’ne rar Datei und meine “download.php” Datei.
Dann der Ordner “downloads”. In dem die “Soundcheckep” rar Datei und “Soundcheckep.rar.db”.
(Die hat so komische Zahnräder als Bild)
Dann nehme ich das hier von Balmung: deinbplacedname.bpalced.net/down … d=bild.jpg
Und machen daraus: bremer.bpalced.net/downloads.php … heckep.rar
Aber es geht nicht?!

Hier sind die Ordner bremer.bplaced.net/

EDIT: ahhh download geht jetzt. aber wo seh ich wie oft das geladen wurde? :slight_smile:
Und ist das nich blöd wenn man durch bremer.bplaced.net/ all die Datein sehen und laden kann?? (also die php und rar.db. Datein?!)

Hi,
in dem Link ist ein “s” zuviel :smiley:
statt “download.php” hast du “downloads.php” im Link geschrieben.

Es funktioniert doch alles:
bremer.bplaced.net/download.php? … heckep.rar

MfG, xcube