Hallo Joachim
[...]
<a href="cgi-bin/counter.pl?url=tttffdie.zip">Link</a>
[...]
CGI
if ($ENV{'REQUEST_METHOD'} eq "GET") {
$buffer = $ENV{'QUERY_STRING'};
-> In $buffer steht dann der im Link übergebene String
} else {
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
Wenn Du nur _einen_ Parameter _ausschließlich_ in einem Link übergeben willst, kanns Du auf die Hälfte des Klumbatschs verzichten ;-)
$buffer = $ENV{'QUERY_STRING'};
open NEU, "counter.txt" or die "Kann counter.txt nicht oeffnen: $!";
$dataa = <NEU>;
$dataa= $dataa + 1;
close(NEU);
open DATEI, ">counter.txt" or die "Kann Datei counter.txt nicht oeffnen: $!";
print DATEI $dataa;
close(DATEI);
Hier willst Du ja anscheinend zählen, wie oft der obige Link angeKLICK!(tm) (SCNR;-) wurde.
Das solltest Du ein wenig optimieren, damit nicht zwei schreibende Zugriffe zur selben Zeit erfolgen.
zum lesen und schreiben öffnen
open (COUNT, "+<counter.txt") or die "Kann counter.txt nicht oeffnen: $!";
flock(COUNT,2); # Datei mit flock sperren (exclusiv) / zweiter Zugriff wartet, bis Datei wieder geschlossen wurde
$dataa = <NEU>; # erste Zeile einlesen
$dataa++ # Zahl um eins erhöhen
seek (COUNT,0,0); # gehe an Anfang der Datei
truncate(COUNT,0); # und schneide den Rest ab (= löschen)
print COUNT $dataa; # schreibe Zähler in counter.txt
close (COUNT) or die "Kann counter.txt nicht schliessen: $!";
schließt counter.txt und hebt den Lock auf
$url = ¶m('url');
Da der Parameter ja in $buffer steht, musst Du anders rankommen:
- $url = $buffer; # dann hättest Du auch beim Einlesen des Parameters schon $url nehmen können
$url =~ s/url=//i; # case-insensitiv, damit Du auch ?URL=datei.zip schreiben kannst :-) - @param = split /=/, $buffer;
$url = $param[1]; - oder wie Frank schon sagte, statt eigenem Einlesen des Parameters
"use CGI;" verwenden, dann funktioniert die Zeile auch
@text=("<html>
[...]
<td><img src="smiley2.gif" width="19" height="19" border="0" alt=""></td>
[...]
</html>");
Neben den Hinweisen von Frank, noch einen hierzu:
Wenn Du $text = ' <html>.....</html>'; also einfache Anführungszeichen verwendest, kannst Du Dir das quoten der Anführungszeichen im String sparen.
Da Du ja scheinbar keine Variablen im String ersetzen musst, kannst Du ' ' verwenden, was die möglichen Fehler reduziert (was hab` ich schon durch fehlendes \ vor " Fehler produziert ;-)
hth
Gruß AlexBausW