hallo,
#!/usr/bin/perl
print "Content-type: text/html\n\n";
foreach $key (keys %ENV) {
print "$key --> $ENV{$key}<br>";
}
Theoretisch nach deiner Auffassung müßte auf der Konsole des Rechners(stdout), wo der Apache läuft die Umgebungsvariablen des Perlscriptes ausgegeben werden.
Richtig?
Falsch. %ENV listet die CGI-Umgebungsvariablen auf, gibt also Informationen über die CGI-Schnittstelle. Du kannst dieses kleine Script auch von der Kommandozeile aus aufrufen, es liefert dieselben Aussagen - völlig ohne Apache. Und es handelt sich _nicht_ um "Umgebungsvariablen des Perlscriptes". Allerdings gibt es Perl-Module (CGI.pm beispielsweise), die eigene Umgebungsdaten definieren, wobei das oftmals den CGI-Umgebungsvariablen recht ähnlich sieht.
Tatsache aber ist, das die Ausgabe letzten Endes im Browserfenster des Client-Rechners dargestellt wird. Das kann eigentlich nur passieren, wenn das Programm, das den Interpreter aufruft den Standard output "abfängt" und an den Client-Rechner überträgt wie auch immer.
Nicht ganz richtig. Das kann es, weil der Interpreter natürlich so brav ist, ihm zusätzlich diese angeforderten Daten nochmals zur Verfügung zu stellen, so daß er sie an den anfragenden Client weiterreichen kann.
Und dieses übergeben hat nichts mit STDIN oder Query_string im Environment zu tun?
Wieso nun STDIN (und nicht mehr STDOUT)? Und was würde geschehen, wenn %QUERY_STRING leer ist?
Apache unterscheidet sehr wohl was es mit den Daten macht, die möglicherweise eine Clientanforderung begleiten.
Selbstverständlich. Das ist Teil der Client/Server-Kommunikation. Vieles dazu kannst du übrigens in SELFHTML nachlesen.
Leider finde ich da nicht den Rückweg, sondern nur den Hinweg zum Script beschrieben,
Schön, daß dir diese Erkenntnis kommt.
For example, if the URL http://www.example.com/cgi-bin/test.pl is requested, Apache will attempt to execute the file /usr/local/apache2/cgi-bin/test.pl and return the output.
Ich kann zwar nicht gut Englisch, aber steht da nicht "Apache....and return the Output"?
Wichtiger ist "will attempt to execute". Apache wird feststellen, daß er das gar nicht kann, aber glücklicherweise gibt es ja noch die shebang, in der steht, wer es kann. Also wird Apache seine Bemühungen aufgeben und das Script dankbar an den Perl-Interpreter übergeben.
Oder macht es dir Spass, dich wie eine Maschine zu benehmen? ;-)
"Wir sind Borg. Widerstand ist zwecklos".
Grüße aus Berlin
Christoph S.