Calocybe: Perl-Prozesse synchronisieren - oder: Wie baue ich einen Counter?

Beitrag lesen

Hallo! Ich mache gerade meine ersten Gehversuche im Thema CGI/Perl, und zu diesem Zweck baue ich einen Schmalspur-Counter. Dazu will ich in einer Textdatei mitzaehlen, wieviele Hits jede Seite hat. Wird das Script aufgerufen, soll es die Textdatei einlesen, den Wert aus der entsprechenden Zeile nehmen, um eins erhoehen, den Wert an den Browser zurueckschicken, und die Datei mit dem neuen Wert aktualisieren. Klar, was ich meine?
So, nun habe ich da zwei Probleme:

1.  Ich muss feststellen, von welcher HTML-Datei aus der Counter aufgerufen wird. Ich dachte, das koennte ich mit der ENV-Variable HTTP_REFERER erledigen, aber das klappt nicht. Diese Variable ist nur gesetzt, wenn ich das Perl-Skript direkt aufrufe, also von einer HTML-Datei einen Hyperlink auf das Script, dann ist der Referrer eben diese HTML-Datei. Wenn ich aber in einer HTML-Datei mittels
<SCRIPT LANGUAGE="JavaScript" SRC="/cgi-bin/counter.pl" TYPE="text/javascript"></SCRIPT>
das Ding aufrufe, ist HTTP_REFERER nicht gesetzt. Vielleicht sollte ich noch dazusagen, dass der verwendete Webserver der Microsoft IIS 3 ist.

2.  Wenn ich dann das Problem mit dem Referrer geloest habe, stehe ich vor einem neuen: Nehmen wir mal an, dass zwei HTML-Seiten fast gleichzeitig aufgerufen werden, und dann fast gleichzeitig der Counter aufgerufen wird, dann laufen doch zwei Perl-Prozesse unabhaengig voneinander, oder? Dann kann es passieren, dass die beiden sich bei ihrem Datei-Lesen/Schreiben in die Quere kommen, und im schlimmsten Fall die ganze counter.dat zerschiessen. Man muesste also die Prozesse irgendwie synchronisieren, damit sie nicht gleichzeitig auf die Datei zugreifen.

Also Leute, Ihr seid gefragt!

Calocybe