Servus,
also nochmals.
Das erste Script, welches lediglich ein get bekommt auswertet.
#!c:\perl58\bin\perl.exe
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($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;
}
####################
Hier nun das 2 Script die lib -> Mein Problemfall
####################
#!/usr/bin/perl
use Time::Local 'timelocal_nocheck' ;
use CGI::Carp qw(fatalsToBrowser) ;
use strict;
############################################################################
Counter
############################################################################
sub count {
my ($page,$ipnum)=@_ ;
my $checknone = 0;
my $date= "12345";
my $lock = 1;
my @output ;
my @lines;
my $i=0;
#Daten laden
open (DAT , "< ./data/stat.log") || die "Kann Datenfile (/data/stat.log) nicht zum Lesen öffnen" ;
@lines = <DAT> ;
close(DAT) ;
#Count schreiben
foreach my $line (@lines)
{
chomp $line ;
my ($num, $pgname, $ipadress, $datum) = split(/&&/, $line) ;
chomp $datum ;
if ($pgname eq $page)
{
$num++;
$checknone = 1;
$output[$i]="$num&&$pgname&&$ipadress&&$datum&&" ;
}
else
{
$output[$i]="$line" ;
}
$i++;
}
if ($checknone == 0)
{
$i++;
$output[$i]="1&&$page&&$ipnum&&$date&&" ;
}
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
#############################################################################
1 ;
Egal was ich versuche.... die stat.log ist innerhalb weniger aufrufe zerbröselt.
Das erst Script funktioniert hingegen tadellos und liefert mir immer die gewünschte seite -> $page.
Gruss Matze