Download-Counter modifiziren
Tania
- php
Hallo!
Ich bin auf einer Seite auf einen wirklich simplen, aber tollen Download-Counter gestoßen (siehe Link). Kann mir ein Experte helfen? Ich möchte das Skript so modifizieren, damit man auch den Download von auf einem anderen Server liegenden Dateien zählen kann.
Vielen Dank für etwaige Hilfe.
Liebe Grüße,
Tania
hallo,
schau mal im PHP Handbuch unter fopen nach, da kann man auch eine URL für die Datei angeben:
http://at.php.net/manual/de/function.fopen.php
Habe mit kurz den Code des Counters angeschaut:
Er öffnet eine Datei mit fopen und speichert dort die Werte ab.
Lt. PHP Manual kann man bei fopen auch eine URL angeben, was ja in deinem Fall von Nöten ist, wenn ich das richtig verstanden habe.
Allerdings braucht man irgendwie einen PHP FIlehandler dazu.
Leider habe ich mit Filehandler noch nicht auseinandergesetzt )zumindest nicht in PHP), hoffe aber mein Tipp hilft irgendwie weiter.
Viel Spaß beim Scripten und
LG,
Georg!
Lt. PHP Manual kann man bei fopen auch eine URL angeben, was ja in deinem Fall von Nöten ist, wenn ich das richtig verstanden habe.
Allerdings braucht man irgendwie einen PHP FIlehandler dazu.
Leider habe ich mit Filehandler noch nicht auseinandergesetzt )zumindest nicht in PHP), hoffe aber mein Tipp hilft irgendwie weiter.
Puh, da bin ich leider überfordert, bin noch blutige Anfaengerin... Weiß jemand anders, wie man es macht?
Liebe Grüße,
Tania
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
Hallo!
also $link = "downloads.php?file=".urlencode("http://www.domain.tld/meine_datei");
und dann bei der Ausgabe:
echo "<a href="$link">zum Download</a>";
Ja, aber damit kann ich dann nur eine Datei aufrufen, wenn ich $link definiere?
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")
Was macht diese Funktion und wo muss ich die hinschreiben?
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
Muß ich das per Hand in die Datei reinschreiben? Beim Originalscript passiert das automatisch.
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.
Hm, kennst du irgendein ähnliches Script im Netz, das das Beschriebene bewerkstelligt? Ich brauche dringend so ein Skript, es SOLLTE aber zuverläßig sein! Vielleicht mit Eintrag in eine MySQL Datenbank.
Vielen Dank für die Antworten!
Liebe Grüße
Tania
Hello,
also $link = "downloads.php?file=".urlencode("http://www.domain.tld/meine_datei");
und dann bei der Ausgabe:
echo "<a href="$link">zum Download</a>";
Ja, aber damit kann ich dann nur eine Datei aufrufen, wenn ich $link definiere?
Genau. Mit jedem Link kann man dann nur genau eine "Datei" referenzieren
Für sieben Ressourcen benötigt man dann eben sieben Links oder eine Select-Box mit sieben Options...
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")
Was macht diese Funktion und wo muss ich die hinschreiben?
Die Funktion header() schreibt in den an den Browser auszugebenden Datenstrom einen HTTP-Header rein, der den Browser dann veranlassen soll, nochmals bei der angegebenen Adresse nachzufragen.
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
Muß ich das per Hand in die Datei reinschreiben? Beim Originalscript passiert das automatisch.
Nein, das passiert dort auch nicht automatisch, sondern muss fertig geliefert werden.
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.
Hm, kennst du irgendein ähnliches Script im Netz, das das Beschriebene bewerkstelligt? Ich brauche dringend so ein Skript, es SOLLTE aber zuverläßig sein! Vielleicht mit Eintrag in eine MySQL Datenbank.
Ja, aber Du wirst es mit Deinen Kenntnissen noch nicht für Deine Zwecke umbauen können. Dazu musst Du noch etwas üben und bitte nicht muckeln, dass ich das jetzt so offen ausspreche.
Schau Dir mal http://selfhtml.bitworks.de --> zählen und speichern ... an
Da ist eine Lockfunktion enthalten, die auch die Quickfunktionen von PHP abdeckt. Man muss dazu eine Dummy-Datei aufbauen.
Es ist eine Downloadfunktion enthalten, die mittels POST aktiviert wird.
Es sind diverse Zähler enthalten und eine zyklische Speicherfunktion.
Du musst Dir davon nun nur die passenden Teile anschauen und nachbauen.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom