agapanthus: So gehts...

Beitrag lesen

Moin.

Kann es sein, daß mit dem Modul CGI das Script ausgaben macht, die der Apache bekommt, TinyWeb aber nicht?

Nein. Schau dir dieses sehr magere Script doch an. Es steht zwar "use CGI" da, das wird aber nicht benutzt, sondern die Ausgabe, die erzeugt werden soll, geht gewissermaßen an CGI.pm vorbei. Wenn du "use CGI" ausklammerst, bekommst du ja das Gewünschte angezeigt.

Eben. Mir fehlt nur im Moment leider die Zeit, das Modul genauer zu untersuchen. Mein Verdacht ist folgender: Im CGI.pm wird die Standard-Perl-Methode print ersetzt. Und die gibt solange die Ausgaben nach STDERR aus, bis ein gültiger Header mittels

$query = new CGI;
print $query->header('text/html'); # o.ä.

erzeugt wurde. Vielleicht lauscht der (Win-)Apache sowohl an STDERR als auch an STDIN, TinyWeb aber nur an STDIN.

Tinyweb kann aber mit dem CGI-Modul umgehen. Nimm das Beispiel, das ich weiter oben angegeben habe. Das funktioniert, und da werden die Ausgaben mit Hilfe von CGI.pm zusammengestellt.

TinyWeb muß nicht damit umgehen können. Perl muß es können.

Eventuell will Tinyweb bloß, daß man keine überflüssigen Zeilen ins Script schreibt.

Das würde heißen, daß TinyWeb das Script parsed, bevor der Server es ausführt. TinyWeb hat aber keine Ahnung von der Sprache, in der das Programm geschrieben wurde, das dort ausgeführt werden soll.

Der Browser fordert bei TinyWeb eine Resource an. Der Server erkennt (TinyWeb vermutlich am Pfad "cgi-bin"), daß es eine Resource ist, die ausgeführt werden soll. Also wird das Programm gestartet, vorher werden natürlich die erforderlichen Umgebungsvariablen gesetzt und ggf. entsprechend der Request Methode die Parameter übergeben. Dann wartet der Server, bis er an STDIN die Daten bekommt, die das Programm ausgibt. Endet es, ohne daß die Ausgabe z.B. einem gültigen HTML-Header enthält, sendet der Server einen Error 500, endet es ohne Ausgabe: ... returned nothing... Und dabei ist es völlig egal, ob das Programm ein shell script, ein Bachtfile, eine .exe oder eben ein Perlscript ist.

Gruß Frank