Servus,
in der Hoffung, dass mir jemand exakt erklären kann woran es scheitert nochmals mein Problem.
Ich habe ein Script, das direkt aufgertufen genau das tut was man so erwartet.
#!/usr/bin/perl -w
use Time::Local 'timelocal_nocheck' ;
use strict;
package count;
count("hallo","12345");
count("ha322llo","12345");
count("ha45lo","12345");
count("hal454o","12345");
count("h24ll5o","12345");
count("h2e34lo","12345");
############################################################################
Counter
############################################################################
sub count {
my ($page,$ipnum)=@_ ;
my $check = 0;
my $date= "12345";
my $lock = 1;
my $i=0;
my @output = ("");
#Daten laden
open (DAT , "< ./data/stat.log") || die "Kann Datenfile (/data/stat.log) nicht zum Lesen öffnen" ;
my @lines = <DAT> ;
close(DAT) ;
#Count schreiben
foreach my $line (@lines)
{
my ($num, $pgname, $ipadress, $datum) = split(/&&/, $line) ;
if ($pgname eq $page)
{
$num++;
$check = 1;
# push(@output,"$num&&$pgname&&$ipadress&&$datum&&");
}
push(@output,"$num&&$pgname&&$ipadress&&$datum&&\n");
}
if ($check == 0)
{
push(@output,"1&&$page&&$ipnum&&$date&&\n");
}
# shift(@output);
open (DAT , "> ./data/stat.log") || die "Kann Datenfile (/data/stat.log) nicht zum Schreiben öffnen" ;
print (DAT @output);
close(DAT) ;
}
#sub datum_zeit {
#our $CONFIG;
#my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time+(3600*$CONFIG{'ZEITVERH'}));
#my $datum = sprintf "%02d.%02d.%04d : %02d:%02d" , $mday , $mon+=1 ,$year+=1900 , $hour , $min ;
#return($datum) ;
#}
#############################################################################
ENDE
#############################################################################
Das Ergebnis:
3&&hallo&&12345&&12345&&
3&&ha322llo&&12345&&12345&&
3&&ha45lo&&12345&&12345&&
3&&hal454o&&12345&&12345&&
3&&h24ll5o&&12345&&12345&&
3&&h2e34lo&&12345&&12345&&
Funtkioniert also wundrbar.
Rufe ich es hingegen per Webzugriff auf folgendees Script auf:
Ja dann gibt es die böse Überraschung.
Aber keinen Fehler.
#!c:\perl58\bin\perl.exe -w
#Module
use strict;
use Config::IniFiles;
use CGI::Carp qw(fatalsToBrowser);
use CGI;
#Ermittlung des Scriptnamens und des Verzeichnisses
#und Wechsel in das aktuelle Verzeichnis (CGI)
$0 =~ /^(.*)[/\].*/ && chdir ($1) ;
require "./libs/statistic.cgi" ;
Notwendige Informationen werden gelesen.
Diese müssen immer als POST Parameter übergeben werden.
my $template = "";
my $query = new CGI;
my $page;
my $cfg = new Config::IniFiles -file => "./conf/conf.ini";
$page = $query->param('seite');
Laden der Configuration aus der ini Datei.
#Host
my $cgi_host= $cfg->val( 'Server', 'DocumentRoot' ) ;
#WWW-Pfad dieses Files (ohne Host)
my $cgi_dir="$cgi_host/cgi-bin" ;
#Backlink (zurück auf der Übersichtsseite)
my $back_link="$cgi_host/index.html" ;
Verzeichnis zu den Bildern.
my $pic_dir="$cgi_host/images/";
Verzeichnis zum template
my $tmpl_dir="$cgi_host/tmpl/";
open (DAT, "< ../$page.html") || die "Kann das Template -tmpl/vote.tmpl- nicht laden." ;
undef $/ ;
my $seite_txt=<DAT> ;
close (DAT) ;
&count::count($page,"127001");
&print_mess($seite_txt);
sub print_mess {
my $mess_txt = shift;
open (DAT, "< tmpl/sturm.tmpl") || die "Kann das Template -tmpl/vote.tmpl- nicht laden." ;
undef $/ ;
my $back=<DAT> ;
close (DAT) ;
$back =~ s/[MESSAGE]/$mess_txt/g ;
$back =~ s/[PICDIR]/$pic_dir/g ;
$back =~ s/[HOME]/$back_link/g ;
$back =~ s/[GETPAGECGI]/$cgi_dir/getpage.cgi/g ;
print "Content-type: text/html\n\n" ;
print $back;
}
jetzt werden nur noch 2 Einträge angezeigt.
Der erstw wird nicht mehr angepasst. Der zweite ändert sich je nach übergabe Werte.
Auch wenn man den aufruf &count::count("hallalalao", "123456");
angibt bessert sich das verhalten nicht.
Kann mir da jemand helfen was dabei schief läuft?
Gruss Matze