Hallo,
my $textzeile=sekunden&&$aktuelle_ip\n;
Du meinst sicher
my $textzeile="$sekunden&&$aktuelle_ip\n";
Wobei ich anmerken will, daß ein Trennzeichen vollkommen ausreichen würde.
usw... Ich glaube, das Hineinschreiben bekomme ich hin, das wird nur anhängendes Schreiben sein, und da zu einer Zeit immer nur ein User das Script ausführen kann, kann es auch nur immer eine Zeile sein, also kein Problem.
Ganz so einfach ist es nicht. Du solltest bedenken, daß ein Webserver mehrere Requests gleichzeitig bearbeiten kann, wodurch auch potentiell gleichzeitige Zugriffe auf diese Datei erfolgen könnten. die Funktion flock() solltest Du Dir daher genauer ansehen.
Außerdem solltest Du zum einen verhindern, daß eine IP-Adresse doppelt vorkommt, zum anderen, daß die Datei bei Zeiten auch wieder aufgeräumt wird, damit sie nicht zu groß wird.
Wie bekomme ich diese Daten wieder sauber aus dieser Textdatei heraus, so dass der erste Wert (Sekunden) auch wieder numerisch ist, und sich damit rechnen lässt.
In Perl gibt eis keine Datentypen, daher können Variableninhalte einmal als Zahl, ein andermal als Text verwendet werden.
my $wasauchimmer = "1234";
my $wasanderes = $wasauchimmer - 4;
print $wasanderes; # gibt 1230 aus
Öffne Datei
Speichere Dateiinhalt in Array-Variable
Schließe Datei
Für Dateizugriffe solltest Du generell einmal http://selfhtml.teamone.de/cgiperl/funktionen/einausgabe.htm durchlesen, da werden die relevanten Funktionen recht gut beschrieben.
Einzig das Einlesen einer Datei ist etwas 'versteckt'.
Allerdings bin ich der Meinung, daß das Einlesen der Daten in ein Array nicht nötig ist, da Du sowieso nur den Inhalt einer bestimmten Zeile suchst.
Hier einmal ein grobes Grundgerüst für das Einlesen:
#!/usr/bin/perl -w
use strict;
use Fcntl ':flock';
open(INFILE, "</pfad/zu/daten.datei") or die "kann Datei nicht öffnen $!";
if(flock(INFILE, LOCK_SH)) #hier wied
{
while(<INFILE>)
{
# hier gehört die Bearbeitung der Zeile, welche in der Variable $_
# gespeichert ist, hinein.
}
close(INFILE);
}
else
{
print "Ups, Datei konnte nicht gesperrt werden";
}
Entschuldigt die vielleicht ganz easy Frage, ich habe leider keine Antwort auf meine Frage in SelfHTML gefunden.
Obiger Link sollte die meisten Fragen beantworten.
Und was das Auswerten der Zeilen betriff, solltest Du Dir unbedingt Funktionen wie chomp() und split() ansehen.
http://selfhtml.teamone.de/cgiperl/funktionen/zeichenketten.htm
Ebenso den Unterschied zwischen numerischen (==) und textuellen (eq) Vergleichen.
http://selfhtml.teamone.de/cgiperl/sprache/operatoren.htm#vergleich
In COBOL geht das leicht. ;-) Leider hilft mir das hier nicht weiter...
Wenn Du COBOL schon leicht findest, dan wirst Du Staunen, wie einfahc es in Perl geht;-)
BTW.: Du weißt daß mehrere Besucher eventuell mit der selben IP-Adresse bei Dir landen können, genau so wie es innerhalb der von Dir gewählten Zeitspanne durchaus vorkommen kann, daß ein Besucher seine IP-Adresse wecheseln kann. Somit ist bei Deinem Vorhaben mit einer gewissen Unschärfe bei der Treffsicherheit zu rechnen.
Grüße
Klaus