Tom
20.05.2002, 10:07
Hi erstmal!
Hab ein Script aus dem Netz gezogen, funzt jetzt aber nicht so, wie es sollte. Es macht nichts anderes, als Benutzerzugriffe(Statistiken) in eine Datei einzutragen. Das funktioniert auch, wenn man es am Server (tripod) von Hand aus startet.
Wurden der Eintrag in der Datei vorgenommen, gibt es aber eine "Exception". Warum beendet das Script nicht ohne Fehler (zuminest auf Tripod)? Nach der exit Anweisung müsste es doch zurückkehren oder?
Also SSI funktioniert. Warum endet das Script nicht ohne Fehler?
2. Frage: Welcher Codeteil ist in eine Html Datei einzubinden, um das Script beim Laden der Html Datei automatisch auszuführen?
<!--#exec cgi="/cgi-bin/Filename.pl"-->
<!--#exec cmd="/absolute/path/from/root/to/cgi-bin/Filename.pl"-->
Funktionieren beide nicht, außer ich mache da was falsch! Wie kann man ein Perl-Script beim Laden einer Page automatisch ausführen, OHNE dass der Benutzer irgend eine Aktion diesbezüglich tätigen muss?
Hier das Script:
------------------------------------------------------------------------
#!/usr/local/bin/perl
#
# Datei für Einträge im entsprechenden Verzeichnis
$logfile = "/dateiname.txt";
# Get the input
read(STDIN, $buffer, $ENV{´CONTENT_LENGTH´});
# Split the name-value pairs
@pairs = split(/&/, $buffer);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
# Un-Webify plus signs and %-encoding
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
# Stop people from using subshells to execute commands
# Not a big deal when using sendmail, but very important
# when using UCB mail (aka mailx).
$value =~ s/~!/ ~!/g;
# Uncomment for debugging purpose
# print "Setting $name to $value<P>";
$FORM{$name} = $value;
}
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
if ($sec < 10) {
$sec = "0$sec";
}
if ($min < 10) {
$min = "0$min";
}
if ($hour < 10) {
$hour = "0$hour";
}
if ($mon < 10) {
$mon = "0$mon";
}
if ($mday < 10) {
$mday = "0$mday";
}
$month = ($mon + 1);
@months = ("January","February","March","April","May","June","July","August","September","October","November","December");
$date = "$hour\:$min\:$sec $month/$mday/$year";
if (! open(LOG,">>$logfile")) {
print "Content-type: text/html\n\n";
print "Couldn´t open $logfile so I´m bugging out..\n";
exit;
}
print LOG "At $date, $ENV{´REMOTE_HOST´} came here from $ENV{´HTTP_REFERER´} using $ENV{´HTTP_USER_AGENT´}.\n";
close (LOG);
exit;
------------------------------------------------------------------------
Was stimmt in diesem Script nicht?
Habe leider wenig Ahnung von Perl, daher bin ich für jeden Hinweis dankbar.
Wie gesagt, das Script sollte beim Aufruf der Seite automatisch ausgeführt werden und den Aufrufer mit seinen Daten entsprechend in einem File ($logfile) eintragen.
Bitte helft mir hier weiter, hab keinen Plan, wo der Fehler liegt!
Ich hoffe auf brauchbare Antworten. Vielen Dank!
Hab ein Script aus dem Netz gezogen, funzt jetzt aber nicht so, wie es sollte. Es macht nichts anderes, als Benutzerzugriffe(Statistiken) in eine Datei einzutragen. Das funktioniert auch, wenn man es am Server (tripod) von Hand aus startet.
Wurden der Eintrag in der Datei vorgenommen, gibt es aber eine "Exception". Warum beendet das Script nicht ohne Fehler (zuminest auf Tripod)? Nach der exit Anweisung müsste es doch zurückkehren oder?
Also SSI funktioniert. Warum endet das Script nicht ohne Fehler?
2. Frage: Welcher Codeteil ist in eine Html Datei einzubinden, um das Script beim Laden der Html Datei automatisch auszuführen?
<!--#exec cgi="/cgi-bin/Filename.pl"-->
<!--#exec cmd="/absolute/path/from/root/to/cgi-bin/Filename.pl"-->
Funktionieren beide nicht, außer ich mache da was falsch! Wie kann man ein Perl-Script beim Laden einer Page automatisch ausführen, OHNE dass der Benutzer irgend eine Aktion diesbezüglich tätigen muss?
Hier das Script:
------------------------------------------------------------------------
#!/usr/local/bin/perl
#
# Datei für Einträge im entsprechenden Verzeichnis
$logfile = "/dateiname.txt";
# Get the input
read(STDIN, $buffer, $ENV{´CONTENT_LENGTH´});
# Split the name-value pairs
@pairs = split(/&/, $buffer);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
# Un-Webify plus signs and %-encoding
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
# Stop people from using subshells to execute commands
# Not a big deal when using sendmail, but very important
# when using UCB mail (aka mailx).
$value =~ s/~!/ ~!/g;
# Uncomment for debugging purpose
# print "Setting $name to $value<P>";
$FORM{$name} = $value;
}
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
if ($sec < 10) {
$sec = "0$sec";
}
if ($min < 10) {
$min = "0$min";
}
if ($hour < 10) {
$hour = "0$hour";
}
if ($mon < 10) {
$mon = "0$mon";
}
if ($mday < 10) {
$mday = "0$mday";
}
$month = ($mon + 1);
@months = ("January","February","March","April","May","June","July","August","September","October","November","December");
$date = "$hour\:$min\:$sec $month/$mday/$year";
if (! open(LOG,">>$logfile")) {
print "Content-type: text/html\n\n";
print "Couldn´t open $logfile so I´m bugging out..\n";
exit;
}
print LOG "At $date, $ENV{´REMOTE_HOST´} came here from $ENV{´HTTP_REFERER´} using $ENV{´HTTP_USER_AGENT´}.\n";
close (LOG);
exit;
------------------------------------------------------------------------
Was stimmt in diesem Script nicht?
Habe leider wenig Ahnung von Perl, daher bin ich für jeden Hinweis dankbar.
Wie gesagt, das Script sollte beim Aufruf der Seite automatisch ausgeführt werden und den Aufrufer mit seinen Daten entsprechend in einem File ($logfile) eintragen.
Bitte helft mir hier weiter, hab keinen Plan, wo der Fehler liegt!
Ich hoffe auf brauchbare Antworten. Vielen Dank!