Transcript Folie 1

CGI (Perl)
Seminar Internettechnologie
WS 2006/2007
Serak Rezane
12.01.2007
The Big Picture
:: Live Demo
2
Gliederung
CGI (Common Gateway Interface)
 Idee/Prinzip
 Funktionsweise
Perl
 Allgemein
 Funktionsumfang
 Beispiele
Zusammenspiel Perl/CGI
3
CGI :: Allgemein
 Bis Anfang der 90er Jahre waren dynamische Inhalte im
Internet nur durch Umschreiben der Serversoftware
möglich.
 1992 wurde CGI (Common Gateway Interface) für den
NCSA-httpd eingeführt.
 Entwickelte sich zum Standard, um dynamische Inhalte
für das World Wide Web zu erzeugen
4
CGI :: Prinzip
:: Common Gateway Interface
 Standard für den Datenaustausch zwischen einem Webserver und
weiterer Software (CGI-Programm)
 Beschreibt, wie der Server Daten aus einem Request an das CGIProgramm übergibt und
 wie die Daten vom CGI-Programm zurück an den Server ausgegeben
werden.





5
Kommunikation: Webserver  CGI-Programm
Standardeingabe STDIN
Standardausgabe STOUT
Umgebungsvariablen (SERVER_NAME, REQUEST_METHOD, QUERY_STRING,…)
weitere HTTP Header (HTTP_USER_AGENT, HTTP_ACCEPTED_LANGUAGE)
[Spezifikation: http://hoohoo.ncsa.uiuc.edu/cgi/overview.html]
CGI :: Funktionsweise
6
[Abb.1]
CGI :: Funktionsweise
 Beim Aufruf eines CGI-Skripts füllt der Webserver
entsprechende Umgebungsvariablen mit Informationen
 CGI-Skript liest über den Hash %ENV
Umgebungsvariablen, wie z.B. Servernamen bzw. IP
 Über STDIN lässt dich der Eingabekanal auslesen
 Ergebnisse kann das CGI-Programm über STDOUT
ausgeben
7
CGI :: Fazit
:: Vorteile
 Kommerziell unabhängig
 Kostenlos
 Produktübergreifender Standard
:: Nachteile
 Relativ geringe Geschwindigkeit
 Neuer Prozess pro CGI-Aufruf
=> Lösung durch FastCGI
8
Perl :: Allgemein
Motivation:
Werkzeug zur System- und Netzwerkadministration mit der
Flexibilität von Sprachen wie z.B. C und der Mächtigkeit von
Shell-Kommandos (z.B. grep, cut, sort, sed, etc.) [wikipedia]






1987 von Larry Wall entwickelt
„Practical Extraction and Report Language”
Skriptsprache (Quelltext wird zur Laufzeit interpretiert )
(Weitgehend) plattformunabhängig
Dateien enden auf .pl
Aktuelle (stabile) Version 5.8.8.
#!/usr/bin/perl –w
print “Hello, world!\n";
9
Perl :: Datentypen
:: Skalare Variablen
 Beginnen immer mit „$“ z. B. $myVariable,
 können Zahlen und Strings beinhalten,
 keine Unterscheidung zwischen String, Integer, Float…,
 keine explizite Konvertierung nötig, da je nach Kontext
interpretiert wird.
Zuweisung
$prioritaet = 9;
$prioritaet = “high“;
$prioritaet = “9“;
10
# der Variable wird der Wert 9 zugeordnet
# der gleichen Variable einen String zuordnen
# akzeptiert werden auch Zahlen als Strings
Perl :: Datentypen
:: Arrays
 Beginnen immer mit „@“, z. B. @myArray.
 Stellen eine Liste von skalaren Variablen dar.
Zuweisung
@musik = (“jazz“, “klassik“);
@mehrmusik = (“rock“, “pop“, @musik);
push(@mehrmusik, “alternative“, “rap“); # Liefert neue Länge des Arrays
pop(@mehrmusik);
# Entfernt das letzte Element
Zugriff
$mehrmusik[0]
$mehrmusik[2]
11
# Liefert erstes Element „rock“
# Liefert drittes Element „jazz“
Perl :: Datentypen
:: Assoziative Arrays (Hashes)
 Schlüssel-Wert-Paare, die in Hash-Tabellen abgelegt werden.
 Beginnen immer mit „%“, z.B. %seminar.
 Elemente werden durch Strings referenziert.
Zuweisung
%studenten = (“123456“,“Serak Rezane“); # Anführungszeichen Pflicht
%studenten = (123457 =>“Else Musterfrau“); # ab Perl V5
%studenten{“654321“} = “Max Mustermann“; # weiteres Element
# hinzuzfügen
Zugriff
$studenten{“123456“}
Konvertierung
@namen = %studenten;
12
# Liefert Serak Rezane
# @namen ist ein Array mit allen Stud.-namen.
Perl :: Datentypen
:: Operatoren
 Arithmetische Operatoren
Addition, Subtraktion, Multiplikation, Division, Negation, Potenzieren
und Modulo
 Gleichheits- und Vergleichsoperatoren
Gleich, ungleich, größer, größergleich, kleiner und kleinergleich
$a == $b
$a eq $b
$a ne $b
# $a numerisch gleich $b? Achtung: Nicht = verwenden
# $a gleicher String wie $b?
# $a und $b nicht der gleiche String?
 Logische Operatoren
and, or, not
($a && $b)
($a || $b)
13
# ist $a und $b true?
# ist entweder $a oder $b true?
Perl :: Datentypen
:: Filehandles
open(INFO, “>Datei.txt”);
# schreiben
print INFO “Dies ist ein Text.\nDas ist die zweite Zeile.\n”;
close(INFO);
open(MOREINFO, “>>Datei.txt”);
print MOREINFO “Eine weitere Zeile.\n”;
close(MOREINFO);
open(READINFO, “Datei.txt”);
while (<READINFO>){
print $_;
}
14
# anhängen
# zeilenweise einlesen
# enthält aktuelles Element
Perl :: Kontrollstrukturen
:: Schleifen
 foreach
 Für das Durchlaufen von Listen und Arrays.
 if, for & while
 Wie in C.
:: Sonstige
 Bool`sche Operatoren
true: Jeder nicht leere String und jede Zahl ungleich Null.

“ist wahr“, 23, -1,
false: Die Zahl Null, Null als String und der leere String.

15
““, ‘‘, 0, -0, 0.0, undef, (), Sonderfall: “0“
Perl :: Kontrollstrukturen
:: Beispiele
for(my $i = 1; $i <= 10; $i++) {
print "Hello, world!/n";
}
my @sachen = ("mein Haus","mein Auto","mein Boot");
foreach (@sachen) {
print "$_\n";
}
$x = 1;
while($x <= 10) { print "Die Wurzel von ", $x, " ist ", sqrt($x), "\n"; $x++;
}
$name = “Tommy";
do { print $name, "\n";
$name = “Annika";
16
}until($name eq “Annika")
Perl :: Subroutinen (Funktionen)
:: Syntax
sub meineFunktion {
Befehle
};
# Funktionsdefinition
# Funktionsaufrufe
&meinefunktion();
# oder &meinefunktion;
&meinefunktion(parameter1,parameter2); # oder meinefunktion(param1,param2);






17
Werden mit sub eingeleitet.
Aufruf durch &meinefunktion($param1, …)
Keine Parameterdeklaration bei der Definition nötig.
Zurückgegeben wird der Wert der return-Anweisung oder des zuletzt
berechneten Ausdrucks.
Existieren keine Parameter, so können beim Aufruf die Klammern
weggelassen werden.
Sind Klammern angegeben, so kann auf das & verzichtet werden.
Perl :: Mustererkennung
:: Reguläre Ausdrücke





Muster in Zeichenketten finden und manipulieren.
Eines der wichtigsten und mächtigsten Merkmale von Perl.
Kardinalität mit +,*,{anzahl}
Klassen mit [ ], z.B. [abc], [a-z] oder [0-9]
Mustererkennungs-Operator ist =~
$text =~ m/Hans Eichel/;
# true, wenn Hans Eichel vorhanden
$text !~ m/Hans/;
# true, wenn kein Hans vorhanden
$text =~ tr/Hans Eichel/Andrea Ypsilanti /; # ersetzen
$email=“[email protected]“;
$email=~m!^\w[\w|\.\-]+@\w[\w\.\-]+\.[a-zA-Z]{2,4}$!;
18
Perl :: Fazit
:: Vorteile





Frei verfügbar  Weit verbreitet
Mächtig beim Umgang mit Text, Dateien und Verzechnissen.
Interaktion mit anderen Anwendungen.
Umfangreiche Modulsammlung (CPAN)
Portabilität (Unix, Linux, Windows, Mac)
:: Nachteile
 Programmcode kann schnell kryptisch werden 
 (Nicht für das Web konzipiert)
19
CGI(Perl) :: Beispiel
:: Live Demo
20
CGI(Perl) :: Quelltext
<HTML>
…
<BODY>
<FORM ACTION="/cgi-bin/name.pl„ METHOD=“POST“>
<P>Benutzername: <INPUT NAME=„username"></P>
<P>Passwort: <INPUT NAME=„passwort"></P>
<P><INPUT TYPE="SUBMIT"">
</FORM>
</BODY>
</HTML>
21
CGI(Perl) :: Quelltext
#!/usr/bin/perl –w
# authentifizierung
use strict;
use CGI qw(:standard);
use DBI();
use CGI::Cookie;
$cgi = new CGI;
# datenbank
$dbh = DBI->connect("DBI:mysql:database=“datenbank“;
host=localhost:3306", “benutzer",
“passwort“);
# … query …
# Benutzer authentifiziert -> setze cookie
$cookie = CGI::Cookie->new(-name => "username",
-value => param('username'),
-expires => "+1M",
-path => "/");
print $cgi->header(-cookie => $cookie),
start_html("Anmeldung erfolgreich!"),
h1("Anmeldung erfolgreich!"),
p("Herzlich willkommen, ", b(param('username'), "!"),
a({-href => "/cgi-bin/seminar/user.pl"}, "Weiter geht`s")),
end_html();
22
Quellen
Literatur & Online-Quellen
http://www.bibsonomy.org/user/siko/perl
Abbildungen
[Abb.1] CGI: http://www.cyber.ust.hk/handbook3/Image10.gif
23