Andreas: Floodprotection

Beitrag lesen

Nabend,

wieso erzeugt folgender Code(Perl) den Fehler(bei Verwendung des Modules strict):

Software error:

Global symbol "$fldtime" requires explicit package name at D:\Server\Apache2\cgi-bin\gaestebuch.pl line 234.
Global symbol "$fldip" requires explicit package name at D:\Server\Apache2\cgi-bin\gaestebuch.pl line 241.
Execution of D:\Server\Apache2\cgi-bin\gaestebuch.pl aborted due to compilation errors.

Ohne strict werden die Anweisungen zwar ausgeführt, aber eben my $fldtime ist != dem $fldtime aus dem ich die neue Zeit ausrechne.

Achja: Bei einem anderen Script klappte es nicht eine Datei zum Lesen und Schreiben zu öffnen, also open(DATA, "+< datei"). Muss man dabei irgendwas beachten?

my $ip = $ENV{'REMOTE_ADDR'};
    my $time = time();

open(DATA,">>$floodprot");
      print DATA "$time|$ip\n";
    close(DATA);

open(DATA,"$floodprot");
      my @ips = <DATA>;
    close(DATA);

open(DATA,">$floodprot");
    foreach (@ips) {
      my $i = 0;

if ($i == 0) {
        (my $fldtime, my $fldip) = split(/|/, $_);
        chomp($fldip);
        $i = 1;
      }

my $timeover = $fldtime + $count;   # Zeile 234

if ($time > $timeover) {
        $i = 0;
        next;
      }

if ($fldip eq $ip) {                # Zeile 241
        print $query->start_html(-title=>'Error',                                 -style=>{'src'=>'../stylesheets/style.css'});
        print $query->p("Fehler: Floodprotection (".$count."sec) [<a href="javascript:history.back();">zurück</a>]<noscript>[<a href="$ENV{'HTTP_REFERER'}">zurück</a>]</noscript>\n");
        print $query->end_html;
        exit;
      }
    }
    close(DATA);

gruss, Andreas