230 likes | 421 Vues
CGI (Perl). Seminar Internettechnologie WS 2006/2007 Serak Rezane 12.01.2007. The Big Picture. :: Live Demo. Gliederung. CGI (Common Gateway Interface) Idee/Prinzip Funktionsweise Perl Allgemein Funktionsumfang Beispiele Zusammenspiel Perl/CGI. CGI :: Allgemein.
E N D
CGI (Perl) Seminar Internettechnologie WS 2006/2007 Serak Rezane 12.01.2007
The Big Picture :: Live Demo
Gliederung CGI (Common Gateway Interface) • Idee/Prinzip • Funktionsweise Perl • Allgemein • Funktionsumfang • Beispiele Zusammenspiel Perl/CGI
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
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 CGI-Programm übergibt und • wie die Daten vom CGI-Programm zurück an den Server ausgegeben werden. • 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 [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
CGI :: Fazit :: Vorteile • Kommerziell unabhängig • Kostenlos • Produktübergreifender Standard :: Nachteile • Relativ geringe Geschwindigkeit • Neuer Prozess pro CGI-Aufruf => Lösung durch FastCGI
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";
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; # der Variable wird der Wert 9 zugeordnet $prioritaet = “high“; # der gleichen Variable einen String zuordnen $prioritaet = “9“; # 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] # Liefert erstes Element „rock“ $mehrmusik[2] # 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“} # Liefert Serak Rezane Konvertierung @namen = %studenten; # @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 numerisch gleich $b? Achtung: Nicht = verwenden $a eq $b # $a gleicher String wie $b? $a ne $b # $a und $b nicht der gleiche String? • Logische Operatoren and, or, not ($a && $b) # ist $a und $b true? ($a || $b) # 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”); # anhängen print MOREINFO “Eine weitere Zeile.\n”; close(MOREINFO); open(READINFO, “Datei.txt”); while (<READINFO>){ # zeilenweise einlesen print $_; # 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. ““, ‘‘, 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"; }until($name eq “Annika")
Perl :: Subroutinen (Funktionen) ::Syntax sub meineFunktion { # Funktionsdefinition Befehle }; # Funktionsaufrufe &meinefunktion();# oder &meinefunktion; &meinefunktion(parameter1,parameter2); # oder meinefunktion(param1,param2); • 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=“sre@cs.uni-kassel.de“; $email=~m!^\w[\w|\.\-]+@\w[\w\.\-]+\.[a-zA-Z]{2,4}$!;
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)
CGI(Perl) :: Beispiel :: Live Demo
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>
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();
Quellen Literatur & Online-Quellen http://www.bibsonomy.org/user/siko/perl Abbildungen [Abb.1] CGI: http://www.cyber.ust.hk/handbook3/Image10.gif