MatzeA: Perl 58 Apache und 2 Sripte...

Beitrag lesen

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