hallo Patrick,
Das Problem mit ScriptInterpreterSource und dem Apache-Absturz habe ich immer noch nicht gelöst
Das ist auch schwer lösbar, da es sich nicht reproduzieren läßt. Du kennst aber den immer wiederkehrenden Hinweis auf die logs: stand/sthet denn da irgendwas, was den Absturz kommentiert/dokumentiert? Wie hat sich der Absturz dargestellt? Sind beide Apache-Prozesse beendet worden (bitte im Taskmanager nachschauen, ob noch einer aktiv ist)?
Fehlermeldungen könnten sein:
- [error] [client xx.xxx.xxx.xxx] (OS 3)Das System kann den angegebenen Pfad nicht finden. : couldn't create child process: 720003: script.cgi
- [error] [client xxx.xxx.xxx.xxx] (OS 3)Das System kann den angegebenen Pfad nicht finden. : couldn't spawn child process
- [error] [client xxx.xxx.xxx.xxx] (OS 123)Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch
- [error] [client xxx.xxx.xxx.xxx] (9)Bad file descriptor: don't know how to spawn child process: script.cgi
dafür bei den Xitami-Manpages herausgefunden, warum da sowohl .cgi als auch .pl-Dateien mit der Unix-Shebang problemlos aufgerufen werden können
Xitami funktioniert völlig anders als der Apache. Die manpages haben für den Apache leider keinerlei Aussagekraft. Du hast vermutlich in deiner Konfiguration nicht angegeben, daß du eben auch die Dateinamensendung *.cgi zur Ausführung als CGI-Script zulassen möchtest. Das geht über Script-Alias, wie du bereits weißt.
Nur zum Vergleich: ich habe einen Apache 2.2.6 unter WinXP laufen. Die Konfigurationsdatei(en), die ich benutze, enthalten "ScriptInterpreterSource registry" sowie einen Container
ScriptAlias /cgi-bin/ "G:/cgi-bin/"
<Directory "G:/cgi-bin">
AllowOverride None
Options Indexes ExecCGI
Order allow,deny
Allow from 192.168
Deny from all
</Directory>
Zum Testen benutze ich ein Script
#!/usr/bin/perl -w
use strict;
use CGI;
use CGI::Carp qw(fatalsToBrowser);
my $cgi = new CGI;
print $cgi->header().
$cgi->start_html('Umgebungsvariablen').
$cgi->h1('Umgebungsvariablen')."\n".
$cgi->start_table({-border => '1'})."\n".
$cgi->Tr($cgi->th({-bgcolor => '#E0E0E0'},'Variablenname')."\n".
$cgi->th({-bgcolor => '#E0E0E0'},'Wert'))."\n";
foreach(keys(%ENV)) {
print $cgi->Tr($cgi->td($cgi->strong($_)).
$cgi->td($ENV{$_}))."\n";
}
print $cgi->Tr($cgi->th({-align => 'left', -bgcolor => '#E0E0E0', -colspan => '2'},
'insgesamt '.scalar keys(%ENV).' Umgebungsvariablen'))."\n".
$cgi->end_table().
$cgi->end_html();
Das ist nur dazu da, die Umgebungsvariablen abzufragen. Es ist nun völlig wurscht, ob ich das "env.pl" oder "env.cgi" nenne, das zeigt so und so jeweils die gewünschte Ausgabe. Auch die shebang darf ruhig so lauten wie angegeben. Wenn ich sie auf _meinen_ Pfad zum Perlinterpreter abändere
#!D/Perl/bin/perl5.10.0.exe -w
kann ich "ScriptInterpreterSource registry" auskommentieren, und das Script wird trotzdem ausgeführt - ebenfalls unabhängig von der gerade vergebenen Dateinamensendung.
Grüße aus Berlin
Christoph S.