Tom: Download-Counter modifiziren

Beitrag lesen

Hello,

Puh, da bin ich leider überfordert, bin noch blutige Anfaengerin... Weiß jemand anders, wie man es macht?

Mit diesem Script könntest Du auch auf Dateien auf einem anderen Server umleiten. Im Aufrufparameter file=... muss dann nur die URL drinstehen. Der Paramter muss mit url_encode behandelt werden.

also $link = "downloads.php?file=".urlencode("http://www.domain.tld/meine_datei");

und dann bei der Ausgabe:

echo  "<a href="$link">zum Download</a>";

Allerdings müssen in der header()-Funktion in einem Location-Header immer vollständige URLs angegeben werden. Dass manche Browser das auch so können, weicht vom Standard ab.
Es müsste also heißen:

header("Location: http://www.meineDomain.tld/index.html")

Generelles zum Script:

Du benötigst eine Datei "downloads.dat" in der die URLS der zu zählenden und erlaubtebn Dateien drinstehen, jede URL in einer Zeile.

http://www.doamain1.de/datei_xyz.txt|0
  http://www.doamain2.de/datei_123.pdf|22

...usw

Wenn die URL in dieser Datei drinsteht, erhält der Browser des Besuchers einfach nur eine Umleitung auf die Original-URL. Die könnte man also auch direkt in die Adresszeile eigeben und die Datei herunterladen, ohne dass es gezählt wird. Das Script ist also nicht sehr zuverlässig.

Außerdem wird das Locking falsch eingesetzt. Man muss auch den Lesevorgang mit sperren, wenn man anschließend eine Datenveränderung vornehmen will. Es könnte nämlich auch passieren, dass gerade während der Eine list, der Andere scheibt und erst die Hälfte wieder drinsteht in der Datei.

Da die Funktion file() dies aber nicht weiß, liest sie nur das, was bereits vorhanden ist und beim anschließenden Wegschreiben der Daten, sind dann die anderen Zählergebnisse verloren.

Die "Quickfunktionen" von PHP liefern aber kein Filehandle und sind daher nicht für direktes Advisory Locking geeignet.

Harzliche Grüße aus http://www.annerschbarrich.de

Tom

--
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau