OT: Parameter an transparenten Perl-CGI-Zaehler uebermitteln
Hallo Liste, ich hab hier mal ein Problem, bei dem mir hoffentlich ein paar Perl-Gurus helfen koennen :-) Ist vielleicht etwas OT, aber da ich ueber eigene Recherchen nicht zum Ziel gekommen bin, versuche ich es nun mal hier :-) Also erst mal das ganze Drumherum: Ich hatte vor, einen transparenten Zugriffszaehler fuer meine Homepage zu erstellen. Einfach nur so fuer mich, ohne Anzeige fuer den Besucher. Dazu gibt es ja zwei Moeglichkeiten, naemlich einmal ueber transparente 1x1-Gifs (Wollte ich nicht, z.B. wegen Textbrowsern) und dann ueber eine Referenz aus dem Header heraus, so wie ich es versucht habe: <HEAD> <LINK rel=stylesheet type="text/css" href="http://www.meincgiserver.de/~login/statistik"> <TITLE> ... </TITLE> </HEAD> (Die Endung .pl fehlt absichtlich, liegt an der Server-Config) Soweit, so gut. Funktioniert wunderbar, das Skript wird aufgerufen, und alles in Ordnung. Da hab' ich mir gedacht, dass ich mit dem Script doch auch gleich alle Seiten meiner Homepage erfassen koennte. So nach dem Motto: "Diese Seite wurde 10mal aufgerufen, jene aber nur 5 Mal.". Also hab' ich den Aufruf wie folgt modifiziert: <HEAD> <LINK rel=stylesheet type="text/css" href="http://www.meincgiserver.de/~login/statistik&startseite"> <TITLE> ... </TITLE> </HEAD> So dachte ich kann ich zu jedem Skriptaufruf die betreffende Seite zuordnen und dieses dann in einer Liste erfassen. Auslesen tue ich den Parameter mit $seitenname=$ENV{"QUERY_STRING"}; was leider nicht richtig funktioniert! Es wird ein leerer String zurueckgeliefert! Browser: Konqueror 2.2.2. Starte ich dagegen das Script direkt ueber eine URL, wie z.B. "http://www.meincgiserver.de/~login/statistik&startseite" im Konqueror, dann erhaelt das Skript den Parameter in der korrekten Form, und alles funktioniert bestens! Wie kriege ich das _in_ der HTML-Datei hin? Mein Kumpel hat auch so einen transparenten Zaehler auf seiner Seite, allerdings bei einem Framdanbieter ohne Quelltexteinsicht. Laeuft aber auch ueber PHP, und da scheint es zu gehen! Scvhliesslich uebermittelt er dabei jedesmal seine Nutzer-ID: http://trans.house27.ch/counter/trans.php?ID=12345"> was bei Ihm auch wunderbar funktioniert. Waere bloed, wenn ich das so nicht auch mit Perl hinbekommen wuerde... Hat da wer ne Idee? Danke im vorraus, Gruss Florian -- For every complex problem there is an answer that is clear, simple, and wrong. -- H L Mencken
On Thu, Apr 25, 2002 at 11:53:41PM +0200, Florian Evers wrote:
ich hab hier mal ein Problem, bei dem mir hoffentlich ein paar Perl-Gurus helfen koennen :-)
Ich mag und mach zwar kein perl, aber kann dir helfen.
<HEAD><LINK rel=stylesheet type="text/css" href="http://www.meincgiserver.de/~login/statistik&startseite">
Starte ich dagegen das Script direkt ueber eine URL, wie z.B. "http://www.meincgiserver.de/~login/statistik&startseite" im Konqueror, dann erhaelt das Skript den Parameter in der korrekten Form, und alles funktioniert bestens!
Wie kriege ich das _in_ der HTML-Datei hin?
Mit dem richtigen Zeichen: Normalerweise faengt beim GET-Befehl der Parameterteil mit dem ? an. Ausserdem kannst du dir mal die Apache bzw. httpd Config vornehmen, weil ein Browser eigentlich auch einen Referer-Header aus dem du die Daten auch entnehmen kannst. Peter
On Fri, 2002-04-26 at 00:57, Peter Wiersig wrote:
Ich mag und mach zwar kein perl, aber kann dir helfen.
Tststs, wer mag denn da sein schweizer Taschenmesser nicht :-)
Ausserdem kannst du dir mal die Apache bzw. httpd Config vornehmen, weil ein Browser eigentlich auch einen Referer-Header aus dem du die Daten auch entnehmen kannst.
Davon würde ich *absolut* abraten. Immer weniger Browser liefern den Referer mit. Es gibt FWs, die diesen ausfiltern und Browser (Opera, glaube ich zum Beispiel). Die Variante mit dem Parameter ist also die richtige Variante. Man sollte bei solchen Aktionen im Skript übrigens immer darauf achten, daß immer nur eine Instanz in das Counter-File schreiben darf. Gruß Volker -- Volker Kroll 4mino AG Chief System Developer Chausseestr. 52 b volker.kroll@4mino.de D-10115 Berlin Tel.: +49-30-2888490-0 Fax.: +49-30-2888490-99
Hallo Liste, hallo Peter, Peter Wiersig [wiersig-ml@dns.glamus.de] schrieb:
On Thu, Apr 25, 2002 at 11:53:41PM +0200, Florian Evers wrote:
ich hab hier mal ein Problem, bei dem mir hoffentlich ein paar Perl-Gurus helfen koennen :-)
Ich mag und mach zwar kein perl, aber kann dir helfen.
<HEAD><LINK rel=stylesheet type="text/css" href="http://www.meincgiserver.de/~login/statistik&startseite">
Starte ich dagegen das Script direkt ueber eine URL, wie z.B. "http://www.meincgiserver.de/~login/statistik&startseite" im Konqueror, dann erhaelt das Skript den Parameter in der korrekten Form, und alles funktioniert bestens!
Wie kriege ich das _in_ der HTML-Datei hin?
Mit dem richtigen Zeichen: Normalerweise faengt beim GET-Befehl der Parameterteil mit dem ? an.
Argh, Fehlerteufelchen! Sollte natuerlich ein Fragezeichen sein, hab's hier nur falsch getippt! :-) Trotzdem Danke fuer den Tip! Ich hab eben noch ein wenig experimentiert, und das Skript so erweitert, dass einfach mal _alle_ Eintrage aus %ENV in eine extra Datei abgespeichert werden. Komischerweise ist in _keiner_ Variablen der Parameter enthalten, und QUERY_STRING selbst ist ein Leerstring. Und mein Netscape meckert irgendwie total, denn der erwartet da wohl irgendwie noch eine Rueckantwort vom Skript, und bringt daher einer Fehlermeldung. Den QUERY_STRING uebermittelt er aber leider ebenfalls nicht... Also nun doch noch der Weg ueber transparente Gif-Grafiken... Argh! Komisch, wieso klappt das denn bei PHP, und bei Perl/CGI nicht? verstehe ich irgendwie nicht...
Ausserdem kannst du dir mal die Apache bzw. httpd Config vornehmen, weil ein Browser eigentlich auch einen Referer-Header aus dem du die Daten auch entnehmen kannst.
Hmm, ich habe nur Zugriff auf %ENV, keine Ahnung, wo ich da noch weitere Daten hernehmen kann... auf die Einstellungen des Servers selbst habe ich keinen Zugriff, da es unser UNI-Server ist. Kann man da irgendwie mit der POST-Methode was machen? Wahrscheinlich nicht, oder? Gruss Florian -- Die Netiquette ist (lediglich) eine FAQ zu der Frage "Warum sind die anderen so genervt von mir und nennen mich immer PLONK?". [Oliver Gassner in dsn]
On Fri, 2002-04-26 at 13:11, Florian Evers wrote:
Ich hab eben noch ein wenig experimentiert, und das Skript so erweitert, dass einfach mal _alle_ Eintrage aus %ENV in eine extra Datei abgespeichert werden. Komischerweise ist in _keiner_ Variablen der Parameter enthalten, und QUERY_STRING selbst ist ein Leerstring.
Ähh, Du benutzt aber schon CGI??? also : #!/usr/bin/perl -w use CGI; use strict; my $seite = $cgi->param('Seite'); my $files = { "index.html" => zaehler_index.dat, "me.html" => zaehler_me.dat, ... }; print STDERR "Got a request for $seite\n"; ## Check if file is locked and then: open DAT, "$file->{$seite} || or die $! if defined $file->{$seite}; incrementCounter(); ## ## To avoid the error in netscape, we have to return some data ## "Und mein Netscape meckert irgendwie total, denn der erwartet da wohl ## irgendwie noch eine Rueckantwort vom Skript, " print $cgi->header("text/css"); print "\n"; exit(); sub incrementCounter { ## XXX }
Den QUERY_STRING uebermittelt er aber leider ebenfalls nicht...
Doch, tut er. Du mußt ihn nur an der richtigen Stelle auslesen.
Also nun doch noch der Weg ueber transparente Gif-Grafiken... Argh!
NEIN!! :-)
Komisch, wieso klappt das denn bei PHP, und bei Perl/CGI nicht? verstehe ich irgendwie nicht...
Weil PHP nur für CGI da ist, während perl eine ausgewachsene Sprache ist ;-)
Kann man da irgendwie mit der POST-Methode was machen? Wahrscheinlich nicht, oder?
POST, kannst Du nur über ein Formular (oder ein Skript) erzeugen Hoffe, das hilft Dir weiter, da das hier OT ist, kannst Du mir aber auch Dein Skript schicken, dann schau ich mal rein. Gruß Volker -- Volker Kroll 4mino AG Chief System Developer Chausseestr. 52 b volker.kroll@4mino.de D-10115 Berlin Tel.: +49-30-2888490-0 Fax.: +49-30-2888490-99
participants (3)
-
Florian Evers
-
Peter Wiersig
-
Volker Kroll