SELFHTML

CGI-notwendige Anweisungen in Perl

Informationsseite

nach unten HTTP-Header und Inhalte senden
nach unten Inhalte senden (alternative Form)

 nach unten 

HTTP-Header und Inhalte senden

Ein CGI-Script wird im Web-Browser aufgerufen, etwa durch das Abschicken eines Formulars. Dann kommuniziert zunächst der Browser mit dem Web-Server über das HTTP-Protokoll und fordert das Script an. Bei dieser Anforderung kann der Browser auch gleich Daten versenden, die für das CGI-Script gedacht sind, z.B. Daten aus dem ausgefüllten HTML-Formular. Der Web-Server entscheidet, dass es sich bei der vom Browser angeforderten Datei um ein CGI-Script handelt und führt das Script mit dem Perl-Interpreter aus. Während dies geschieht, "wartet" der Browser jedoch auf Daten. Denn wenn der Browser vom Server ein CGI-Script anfordert, ist das nichts anderes, als wenn er eine statische HTML-Datei anfordern würde. Er wartet auf Daten, die der Server sendet und die er (der Browser) als nächstes anzeigen soll. Deshalb muss ein CGI-Script irgendetwas an den wartenden Browser senden. Die zu sendenden Daten müssen dabei wieder über das HTTP-Protokoll verschickt werden. Das HTTP-Protokoll verlangt aber für jeden Datenversand einen so genannten HTTP-Header. Das ist eine Art Vorab-Datenpaket mit Informationen zu den nachfolgenden Daten. Damit ein Browser die Daten des CGI-Scripts korrekt interpretieren kann, muss das Script zunächst einen gültigen HTTP-Header senden.

Beispiel eines vollständigen CGI-Scripts:

#!/usr/bin/perl -w

use strict;
use CGI::Carp qw(fatalsToBrowser);

my $Text = "Hallo Welt";

print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
print "<html><head><title>Hallo Welt</title></head><body>\n";
print "<h1>$Text</h1>\n";
print "</body></html>\n";

Erläuterung:

Für den HTML-Code, den ein Perl-Script als CGI-Script an den wartenden Browser senden möchte, ist die Perl-Funktion Seite print geeignet. Zum "Senden" gibt das Perl-Script einfach mit der print-Funktion Daten aus. Die erste dieser print-Anweisungen, die ein CGI-Script enthalten muss, ist jedoch diejenige für den HTTP-Header. Die einfachste Form eines HTTP-Headers besteht schlicht in dem Befehl Content-type: und der Angabe eines Seite Mime-Typen für die nachfolgenden Daten. Da das CGI-Script sinnvollerweise HTML-Code an den Browser senden will, benutzt es den Mime-Type für HTML, nämlich text/html. Weiterhin muss ein HTTP-Header zwei abschließende Steuerzeichen für Zeilenumbruch enthalten. In Perl lässt sich ein solches Steuerzeichen durch die Zeichenfolge \n erzeugen. Durch die Anweisung:
print "Content-type: text/html\n\n";
wird also ein vollständiger HTTP-Header erzeugt, der dem Browser signalisiert, dass Daten vom Typ HTML folgen. Für eine vollständige HTTP-Kommunikation sind freilich noch mehr HTTP-Headerzeilen notwendig; die fehlenden Angaben werden dann von der Seite CGI-Schnittstelle bzw. vom Seite Webserver ergänzt.

Anschließend wird mit einzelnen print-Anweisungen eine vollständige kleine HTML-Datei an den Browser gesendet. Bei den einzelnen print-Anweisungen ist am Ende übrigens immer ein Zeilenumbruchzeichen \n notiert. Dies hat eher kosmetische Gründe. Dadurch wird im erzeugten HTML-Quelltext jeweils eine neue Zeile eingefügt. Würden diese Steuerzeichen fehlen, dann würde Perl alles in eine Textzeile schreiben. Bei der print-Variante mit der Textmarke wird der HTML-Quelltext dagegen so umgebrochen wie er im Editor eingegeben ist.

Innerhalb der h1-Überschrift wird im obigen Beispiel eine Variable ausgegeben, nämlich der Seite Skalar $Text. Sie können innerhalb von print-Ausgaben einfach solche Variablen einfügen. An der entsprechenden Stelle wird dann der aktuelle Wert der Variablen ausgegeben. Im obigen Beispiel wird dem Skalar $Text weiter oben im Script der Wert Hallo Welt zugewiesen. Dieser Wert wird an der Stelle, wo $Text im auszugebenden HTML-Code notiert ist, eingesetzt.

 nach obennach unten 

Inhalte senden (alternative Form)

Die vielen einzelnen print-Anweisungen sind bei längeren Ausgaben lästig. Es gibt deshalb auch eine elegantere Form der Ausgabe größerer HTML-Code-Abschnitte.

Beispiel eines vollständigen CGI-Scripts:

#!/usr/bin/perl -w

use strict;
use CGI::Carp qw(fatalsToBrowser);

my $Einleitung = "Es geht auch so!";

print "Content-type: text/html\n\n";

print <<"ENDE";
<html><head><title>Testausgabe</title></head><body>
<h1>$Einleitung</h1>
<p>Der Vorteil bei dieser Form ist, dass man viel HTML-Code
auf einmal erzeugen kann, ohne einen einzigen weiteren print-Befehl
in Perl zu notieren. Praktisch beispielsweise auch zum Ausgeben
von JavaScript:</p>
<script type="text/javascript">
<!--
document.write("<p>Und die Adresse dieser HTML-Datenquelle lautet: ");
document.write(document.URL+"<\/p>");
//-->
</script>
</body></html>
ENDE

Erläuterung:

Das Script sendet zunächst mit einer einzelnen print-Anweisung den HTTP-Header. Anschließend wird jedoch eine elegantere Methode benutzt, um größere Mengen HTML-Code zu senden. Dabei wird zunächst die Anweisung print <<"ENDE;" notiert. ENDE ist ein frei vergebbarer Name für einen Endbegrenzer. Ganz unten im Script ist dann noch einmal das Wort ENDE notiert, und zwar alleinstehend in einer Zeile. Alles, was zwischen der einführenden Anweisung und dem alleinstehenden Endbegrenzer steht, wird so wie es da steht an den Browser gesendet. Sinnvoll ist diese Form der Notation, wenn längere Abschnitte HTML-Code gesendet werden sollen. Der HTML-Code kann alles mögliche enthalten, zum Beispiel auch JavaScript-Bereiche, wie im Beispiel gezeigt, aber auch Perl-Variablen! Diese werden interpoliert, d.h. bei der Ausgabe durch ihren Wert ersetzt - allerdings nur, weil print <<"ENDE;" mit doppelten Anführungszeichen notiert wurde. Erlaubt ist auch die Notation mit einfachen Anführungszeichen, also print <<'ENDE;'. In diesem Fall werden keine Perl-Variablen interpoliert (siehe auch: Seite Regeln beim Notieren von Zeichenketten).

Beachten Sie:

Hinter dem Endbegrenzer muss auf jeden Fall ein Zeilenumbruch notiert werden, gerade auch dann, wenn es sich um die letzte Zeile im Script handelt.

Eine weitere, oft genutzte Möglichkeit, HTTP-Header und HTML-Code an den Browser zu senden, bietet das Seite CGI-Modul an. Dieses Modul stellt eigene Methoden bereit, um HTML-Ausgaben zu erzeugen. Zum Senden an den Browser wird aber auch dort die print-Funktion verwendet.

 nach oben
weiter Seite Skalare (Variablen)
zurück Seite Grundsätzliches zu Perl
 

© 2001 E-Mail selfhtml@teamone.de