• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Wie kann ich Klicks auf meinen ''download.zip'' fangen

RoSiebzig

New member
Hallo!


Wie kann ich Klicks auf meinen ''download.zip'' der auf meiner homepage zur Verfügung steht, richtig fangen , um einen funktionierenden counter ''/cgi-bin/dcnt.pl'' aufzurufen? mit javascript ''onClick''? perl/cgi <!-- exec .. //--> ? irgendwie?

Ich habe versucht, meinen Seiten-Aufruf-Zähler, der einwandfrei funktioniert zu einem download-counter umzufunktionieren ..
Unterschied ist, daß nicht beim Laden der Seite, sondern beim Klick auf den download der Zähler aktiviert werden soll ..

habe es mit
Code:
<a href="download.zip" [B][COLOR="Red"]onClick="../cgi-bin/dcnt.pl"[/COLOR][/B]>
versucht, aber es zählt nicht.
chmods (dcnt.pl, dcnt.dat) sind auf 755.

auch dcnt.dat anzeigen per
Code:
<iframe src="../cgi-bin/dcnt.dat"> </iframe>
funktioniert nicht .. es kommt ''premature end of script header: dcnt.dat, error 500''

( Der Seitenaufrufzähler hat hingegen einfach
Code:
<iframe src="cgi-bin/cnt.pl">
und wird ja bei jedem öffnen der Seite in einem Rutsch weitergezählt UND angezeigt )

per SSi
Code:
<!--#exec cgi="/cgi-bin/dcnt.pl"-->
wüßt' ich nicht, wie es nur beim Klick auf ''download.zip'' funktionieren sollte (.., statt bei jedem Aufruf der Seite)

Danke schonmal!

benutze mozzifox 2.*, win'98, p iii
 
Zuletzt bearbeitet:
in html/cgi-bin/cnt.pl (bzw dcnt.pl mit ''dcnt.dat'')
dort liegt auch cnt.dat mit Inhalt ''[Anzahl Aufrufe]''

Code:
#!/usr/bin/perl
use strict;
my $filename = 'cnt.dat'; 
open my $inh, '<', $filename;
my $zpe = <$inh> || 0;
$zpe += 1;
close $inh;
open my $outh, '>', $filename;
print $outh $zpe;
close $outh;
#print "Content-type: text/html\n\n";
#print "<html><body topmargin=0>$zpe</body></html>";
[edit:, 22:13] habe die print mittlerweile auskommentiert, da diese dcnt.pl (im Gegensatz zur cnt.pl) ja nicht im frame aufgerufen und angezeigt wird, sondern erstmal nur zählen soll.[endedit]
[edit:, 23:54] die jeweilige cnt.dat enthält die laufende Zahl, dcnt.dat immer noch auf ''0'' [endedit]
in dcnt.pl ist ''cnt.dat'' einfach ''dcnt.dat''

[win'98 genügt mir völlig :eek:) .. ]
 
Zuletzt bearbeitet:
Läuft das Skript in deinem lokalen Webserver?
Könnte ev. sein, dass du die Datei im falschen Modus übertragen hast.
 
.. wie gesagt -- als counter für visits funktioniert's ..

meinst Du mit 'Modus' chmod?
wie gesagt, beide auf 755.

einen lokalen webserver hab' ich nicht .. ganz normaler provider.
 
Zuletzt bearbeitet:
Ich mein' den Uploadmodus bei FTP. Existiert denn die Datei dcnt.dat?

Du kannst dir ja mal einen auf deinem Rechner installieren - ist nicht so schwer.
 
Upload-Modus müßte ASCII sein ..
hab's als text-Datei hochgeladen .. und wie gesagt .. beim cnt.pl funktioniert's ja auch ..

dcnt.dat ist im selben Verzeichnis ('daneben') mit Inhalt (integer-Zahl): ''0''.
(cnt.dat zählt dieweil fleißig die Seitenaufrufe).

Mein Hauptproblem ist, wie ich dcnt.pl richtig aufrufe aus der html mit dem download, .. aber eben nicht pro Seitenaufruf, sondern pro Klick auf den download.
per onClick hat's in div Varianten (normal, maskiert als SSi, relativer, absoluter Pfad zur dcnt.pl, u.v.m.) bisher nicht funktioniert.
und mit
Code:
<!--#exec cgi="/cgi-bin/dcnt.pl"-->
wüßt' ich nicht, wie ich's auf Klicks auf den download beschränken kann ..
 
Du kannst doch das iFrame einfach dynamisch bei onClick erstellen. Außerdem könnte die Seite verlassen werden, bevor das Script ausgeführt wird... Ich bin für einen Testlink!
 
Du kannst doch das iFrame einfach dynamisch bei onClick erstellen.
Dazu müßte dcnt.pl erstmal richtig aufgerufen werden und erstmal überhaupt zählen, denk' ich .. ?

Oder .. Du meinst, .. sozusagen einen 'blinden' iframe kurzzeitig generieren, um von dem aus - (wie vom bisherigen site-counter gewohnt) - das dcnt.pl zu aktivieren!? .. Yeah! Das klingt schön einfach und müßte klappen! .. Das probier' ich jetzt 'mal!

Geht das denn aber nicht trivialer, ohne diesen Umweg über einen iframe, den ich an sich ja nicht brauche, sonst?
Warum funktioniert
Code:
<a href="download.zip" [COLOR="Red"]onClick="../cgi-bin/dcnt.pl"[/COLOR]>download.zip</a>
nicht?

Außerdem soll der Zähler (dcnt.dat) später 'mal immer, nicht nur bei onClick extra ausgelesen werden.

Außerdem könnte die Seite verlassen werden, bevor das Script ausgeführt wird... Ich bin für einen Testlink!
Das nehm' ich gern in Kauf, um überhaupt 'mal zu wissen, ob schon jemand mein Programm gezogen hat ..
 
Zuletzt bearbeitet:
Nur um's nochmal klarzustellen. dcnt.pl ist das Script, dass um eins hoch zählt und mit dcnt.dat wird der Zähler angezeigt. Funktionieren beides, wenn du sie direkt aufrufst?
 
Nur um's nochmal klarzustellen. dcnt.pl ist das Script, dass um eins hoch zählt und mit dcnt.dat wird der Zähler angezeigt.
im Prinzip korrekt. das script dcnt.pl liest, inkrementiert und überschreibt cnt.dat und schreibt dann noch die Zahl aus cnt.dat in diesen aufrufenden iframe.
Während cnt.pl als
Code:
<iframe src="cgi-bin/cnt.pl"></iframe>
aufgerufen wird UND im seleben Zug auch in diesem iframe der counter angezeigt wird, dann wieder (eben pro Seitenaufruf),
geht dies so mit dem ''download.zip'' src="" ja nicht, aber das seh' ich dann später vllt mit
Code:
<!--#include cgi="/cgi-bin/dcnt.dat-->
irgendswie ..

Funktionieren beides, wenn du sie direkt aufrufst?
als cnt.pl und cnt.dat zählt es seit Jahren die Seitenaufrufe.
hab' in dcnt.pl nur ''cnt.dat'' zu ''dcnt.dat'' umbenannt, und die beiden print-Zeilen auskommentiert, da ich erstmal will, daß das Zählen klappt (steht die ganze Zeit auf ''0'', immer noch, obwohl ich online den download getestet hab').

Wie ich's dann anzeigen laß', weiß ich eben auch noch nicht.

[Hab' vorhin auch noch editiert, die Antwort vorher]
 
Zuletzt bearbeitet:
@dkdenz
is' mir bewußt.
Wenn mir Einer meinen kleinen Zähler kaputtmacht, lad' ich ihn eben neu oder anders wieder hoch.
Wenn einer meine Seite knackt, merk' ich es und laß sie vom provider sperren.

Solange mich kein Meteorit trifft .. ;o|:]
 
Oder .. Du meinst, .. sozusagen einen 'blinden' iframe kurzzeitig generieren, um von dem aus - (wie vom bisherigen site-counter gewohnt) - das dcnt.pl zu aktivieren!? .. Yeah! Das klingt schön einfach und müßte klappen! .. Das probier' ich jetzt 'mal!
genau das hab ich gemeint aber du solltest im onclick zuerst mal false zurückgeben um zu verhindern, dass der Download gleich ausgeführt wird. Wenn das iFrame fertig geladen ist kannst du einfach das .href Attribut auslesen und per location setzen.
 
Du scheinst nicht weiter gelesen zu haben.
Da ist ein kompletter Downloadzähler aufgeführt.
Bevor Du mit dem Umbau Deines Scripts weiter rumeierst, könntest Du ja ein funktionierendes Teil nehmen...
 
@dkdenz & @Junkee[]

.. hab' halt die ganze Zeit das Gefühl, daß mir nur ein ''onClick'' oder ein ''exec'' oder eine ''Zwischenspeicher- oder ~aufrufdatei.html'' irgendwo an der richtigen Stelle fehlt (bevor ich 'was ganz neues anfang' oder doch noch perl richtig lernen muß).

Aber das mit dem onClick="*.myiframe.*" müßt' ich hinkriegen mit selfhtml.

Vielen, vielen Dank, einstweilen, Euch Allen!
 
Guten Morgen! .. :eek:)

.. es 'will' einfach nicht klappen ..:

habe jetzt versucht, aus einem blinden iframe ''dcntiframe'' , die ''../cgi-bin/dcnt.pl'' aufzurufen per Funktion bei onclick:
Code:
<html><body>
<script type="text/javascript">
<!--
function dcntIFrame() {
	dcntiframe=document.createElement('iframe');
	dcntiframe.width=700;  dctiframe.height=20;
	document.body.appendChild(dcntiframe);
	dcntiframe.location.href="/cgi-bin/dcnt.pl";  
} //--></script>
<div align=center>download: (2,507 MB)  <a href="download.zip" onclick="dcntIFrame()">download.zip</a>
 (
<frameset cols="50">
<frame src="="/cgi-bin/dcnt.dat"> </frame></frameset>
<iframe src="/cgi-bin/dcnt.dat"> </iframe><!--//-->
<!--#include virtual="/cgi-bin/dcnt.dat" -->
downloads)
[..]
</body></html>
Außer, daß der dcntiframe nach onclick angezeigt wird, funktioniert nichts von alledem.
Und auch der wird anscheinend nicht vollständig geladen, hat aber als 'Auswahl-Quelltext' sein parent und zeigt in neuem Tab geöffnet auch den generierenden parent an, der übrigens selber ein frame ist. (!?)
Auch nicht mit ''../cgi-bin/dcnt.pl''.
Auch nicht mit erst Zeile ''dcntiframe.location.href="/cgi-bin/dcnt.pl"; und ''appendChild'' danach.
Auch nicht mit ''.src='' , statt ''.location.href=''.

Obige .shtml liegt im Unterschied zum funktionierenden Seitenaufruf-counter ''cnt.pl'' (mit ''cnt.dat'') einen Ordner tiefer (''programme'') auf dem server, .. aber daran sollte es doch nicht liegen, daß ''dcnt.pl'' nicht erreicht wird?
Alle chmods sind auf 755.

Ich will doch nur 1 und 1 zusammenzählen .. *heul* .. :eek:)

hier nochmal ''../cgi-bin/dcnt.pl''
Code:
#!/usr/bin/perl
use strict;
my $filename = 'dcnt.dat'; 
open my $inh, '<', $filename;
my $zpe = <$inh> || 0;
$zpe += 1;
close $inh;
open my $outh, '>', $filename;
print $outh $zpe;
close $outh;
print "Content-type: text/html\n\n";
print "<html><body topmargin=0>$zpe</body></html>";
(Da nun doch aus und in dcntiframe geladen wird, hab ich die print-Zeilen wieder unkommentiert)
 
Immer mal langsam, Eins nach dem Anderen. Ist doch klar, dass das iFrame nicht vollständig geladen wird. Du klickst ja auf einen link und wirst auf eine andere Seite geleitet.
Code:
<script type="text/javascript">
function dcntIFrame(href) {
	var dcntiframe=document.createElement('iframe');
	dcntiframe.width=700;
	dctiframe.height=20;
	dctiframe.onload = function() {
		document.location = href;
	}
	dcntiframe.src="/cgi-bin/dcnt.pl";
	document.body.appendChild(dcntiframe);
}
</script>
<a href="download.zip" onclick="dcntIFrame(this.href); return false;">download.zip</a>
Sollte eigentlich funktionieren. Teste das einfach mal und gucke dir danach den Zähler an.
 
(Hab' tagelang 'rumprobiert schon .. jetzt bin ich sehr erleichtert!)
Schön, dass Du eine Lösung gefunden hast, allerdings ist der Ansatz ansich schon problematisch. Wenn Der Benutzer Javascript ausgestellt hat, dann kann er/sie/es die Datei x-Mal runterladen, ohne dass Du irgendwas davon mitbekommst.
Sinnvoller wäre es den Download gar nicht direkt anzubieten, sondern Download und Zähler über ein einziges Skript zu realisieren. Dazu würde die URL im "<a href" auf Dein neues Skript gesetzt und dieses erhöht zuerst den Zähler, um dann die eigentliche Datei selbst zu öffnen und an den Browser zu leiten. Dadurch bleibt kein Download ungezählt, und Du könntest zusätzliche Bedingungen mit dem Download verknüpfen (Ausfüllen eines Formulars, Login, usw.), wenn erforderlich.
 
Zurück
Oben