Webdesign-Workshop
von Wolfgang Bergt

Wolfdesign

Dynamische Webseiten mit PHP, CGI und Perl

zur Startseite
zurück Inhaltsübersicht weiter

 

Inhalt

Was ist PHP?
Was ist CGI?
Was ist Perl?
Perl-Grundlagen
Texte und Strings mit Perl
Zahlen mit Perl
Listen mit Perl
Schleifen und Bedingungen
PHP-Zusammenfassung
PHP-Quellen
CGI-Zusammenfassung
Beispielscripts
CGI-Quellen
 

Was ist PHP?

PHP wurde 1995 von Rasmus Lerdorf entwickelt. Der Begriff stand damals noch für Personal Home Page Tools und war ursprünglich eine Sammlung von Perl-Skripten, die Rasmus Lerdorf zur Protokollierung der Zugriffe auf seinen Online-Lebenslauf geschrieben hatte.

PHP (PHP Hypertext Preprocessor) ist eine Skriptsprache mit einer an C bzw. C++ angelehnten Syntax, die v. a. zur Erstellung von dynamischen Webseiten und Webanwendungen benutzt wird.

HTML-Seiten sind eigentlich statisch. Soll der Inhalt einer Seite geändert werden, muss man den Sourcecode bearbeiten und die Datei neu auf dem Server speichern. Häufige Aktualisierungen sind so natürlich sehr umständlich und aufwendig.

Dynamisch können Webseiten mit PHP oder CGI und Perl gemacht werden, wobei der Quelltext auf dem Server bei jedem Aufruf der Seite neu gebildet wird - im Gegensatz zu JavaScript, das in der Regel clientseitig ausgeführt wird. Bei JavaScript rechnet der Browser nach der Übertragung, bei PHP bzw. CGI und Perl ein Interpreter auf dem Webserver schon vor der Übertragung. Erst dessen Ausgabe wird an den Browser geschickt.

Um eine PHP-Datei im Rahmen einer Webanwendung ausführen zu können, benötigt man ein System, das mit den in der Datei enthaltenen Anweisungen umgehen kann. Aus diesem Grund wird durch eine Schnittstelle (beispielsweise ISAPI oder CGI) der Interpreter von einem Serverdaemon bzw. Serverdienst (z. B. Apache oder IIS) ausgeführt.

Die Kombination von Linux/Windows/Mac-OS als Betriebssystem, Apache als Webserver, MySQL-Server als Datenbank und PHP wird LAMP, WAMP bzw. MAMP genannt. Fertige LAMP-, WAMP und MAMP-Pakete, werden im Projekt XAMPP entwickelt und können als Oper-Source fertig einsatzbereit aus dem Internet geladen werden.

 

Was ist CGI?



Für die Kommunikation zwischen dem Besucher-Rechner und dem Server wurde eine standadisierte Plattform geschaffen: das so genannte Common Gateway Interface.

Mit dieser Standardmethode ist es möglich, unabhängig vom Serversystem Programme auf Webservern laufen zu lassen. So brauchte nicht für jede Programmiersprache eine eigene Schnittstelle entwickelt zu werden. Theoretisch kann man jede Programmiersprache für CGI-Programme benutzen. Allerdings eignen sie sich sehr unterschiedlich. Als Standard für CGI-Programme hat sich Perl etabliert. Perl wird von fast allen Servern unterstützt.

Programmiert wird nicht für den Client, sondern ein Programm, das auf dem Server ablaufen soll, in der Regel unter LINUX oder UNIX.

Der Web-Server stelt eine HTML-Seite zur Verfügung. Darin macht der Benutzer eine Eingabe. Diese Eingabe kommt zum Server und startet ein Programm. Für die Bearbeitung des Programms werden evtl. weitere Dateien des Servers genutzt (z.B. Datenbanken). Das Ergebnis der Programmabarbeitung führt auf dem Server zu einer überarbeiteten oder neuen HTML-Seite, die sofort ins Netz gestellt wird. Das ist schlimmstenfalls eine Fehlermeldung.

Man benötigt eine spezielle Umgebung, in der die Programme ausgeführt werden. In der Regel ist das ein Unterverzeichnis auf dem Server des Internet-Providers, meist "cgi-bin". Manche Provider stellen diesen Ordner nur gegen eine höhere Gebühr zur Verfügung.

zum Anfang

Was ist Perl?

Larry Wall hat in den fünfziger Jahren Perl entwickelt, um UNIX-Rechner zu pflegen und zu verwalten.

Er brauchte eine Programmiersprache, mit der er Textdateien auf einfachem Wege auslesen und manipulieren konnte, damit Systemberichte entstehen. Da er nichts Geeignetes vorfand, schuf er die Practical Extraction and Report Language.

Perl wurde um viele Funktionen erweitert und ist heute komplexe Sprache nicht nur für Texte.

Nach wie vor ist Perl eine UNIX-Sprache. Auf Windows- und Macintosh-Systemen muss es erst installiert werden. Die jeweils aktuelle Windows-Version von Perl findet man unter www.activestate.com. Perl braucht keinen Compiler, sondern wird in Echtzeit interpretiert.
zum Anfang

Perl-Grundlagen

Perl-Programme schreibt man mit einem einfachen Editor als reine ASCII-Texte. .
  • Kommentare werden mit dem Zeichen # (Hash) eingeleitet. Alle weiteren Zeichen in der selben Zeile werden von Perl ignoriert. So kann man Hinweise in das Programm schreiben, um für später oder für andere die Programmstruktur deutlich zu machen.


  • Anweisungen erwecken das Programm zum Leben, sie sagen Perl, was es tun soll.
    • Einfache Anweisungen verlangen eine direkte Aktion, z. B. eine Multiplikation oder die Ausgabe eines Textes auf dem Bildschirm.
    • Bedingungsanweisungen werden nur ausgeführt, wenn die Bedingung erfüllt ist.
    • Schleifenanweisungen werden bis zum Stoppbefehl wiederholt.
    Manche Anweisungen brauchen Parameter (z. B. print), andere stehen für sich allein (z. B. exit)
    Jede Anweisung wird mit einem Semikolon (;) abgeschlossen.


  • Variablen ermöglichen es, Werte zu speichern, die ihnen zugewiesen werden. Die Variablen werden nicht definiert wie in anderen Programmiersprachen. Variablen beginnen mit dem Dollarzeichen ($). Es folgt der Name, welcher mit einem Buchstaben beginnen muss. Groß- und Kleinschreibung wird unterschieden.


  • Formatierungen haben bei Perl wenig Beduetung. Leerzeichen haben nur innerhalb von Anführungszeichen Bedeutung.
    Die häufigsten syntaktischen Fehler sind vergessene Semikolon oder Tippfehler. Sie führen zu Fehlermeldungen.
    Semantische Fehler müssen inhaltlich gesucht werden.
zum Anfang

Texte und Strings mit Perl

Strings sind alle Folgen von null oder mehr Tastatureingaben. Der Nullstring enthält kein Zeichen. Strings stehen in doppelten Anführungszeichen. Sind es nur einfache Anführungszeichen, so werden Variablen nicht interpretiert, sondern selbst als String behandelt.
Auch der vorangestellte Backslash (\) verhindert die Interpretation eines Zeichens oder einer Variablen.
$feier="Weihnachten";
print "Die Variable \$feier hat den Wert \"$feier\".";

führt zu dem Ergebnis Die Variable $feier hat den Wert "Weihnachten"..

Strings kann man zusammenfassen:
$tring1="Segel";
$tring2="Schiff";
print "$tring1" . "$tring2";

führt zu dem Ergebnis SegelSchiff.

Strings kann man multiplizieren:
print ,w' x10;
führt zu dem Ergebnis wwwwwwwwww.

Strings kann man verkürzen:
$tring1="Bergt";
chop ($tring);
print ($tring);

führt zu dem Ergebnis Berg.

Sonderzeichen formatieren Texte:
 \n  Neue Zeile
 \r  Wagenrücklauf
 \t  Tabulator
 \v  Vertikalzeichen
 \f  Papiereinzugszeichen
 \b  Rücksetzzeichen
 \a  Piepton
 \e  Unterbrechungszeichen
zum Anfang

Zahlen mit Perl

Zahlen werden von Perl problemlos akzeptiert. Reelle Zahlen haben einen Punkt als Dezimalstellenzeichen.

Perl kann addieren (+), subtrahieren (-), multiplizieren (*), dividieren (/) und potenzieren (**). Perl beherrscht die Klammerregeln. Bei der Modulo-Rechnung erhält man den Rest einer Division (%).

Bei der Inkrementierung und Dekrementierung kann man viel Schreibarbeit sparen. Für mich als Mathelehrer sind Zeilen wie
$Anzahl = $Anzahl + 1;
nur auszuhalten, wenn ich das Gleichheitszeichen als "wird zu" ausspreche. Deshalb ist es beruhigend, dass man den Satz auch so schreiben kann:
$Anzahl++;
Analog gilt für die Dekrementierung:
$Anzahl--;

Perl beherrscht natürlich Funktionen. Hier sind einige Beispiele:

Funktion Ergebnis
sqrt (16) 4
log (100) 4.6051...
exp (4) 54.5981...
abs (-23) 23
int (3.567) 3


Perl beherrscht natürlich die elementare Logik.
Ein falscher Ausdruck ist immer gleich 0. Jede Zahl außer 0 ist bei Perl immer wahr.
Ein leerer String (also "") ist immer falsch. Jeder nicht leere String ist bei Perl immer wahr

Aus Zahlen kann man ganz einfach Strings machen. Andererseits kann es zu unerwarteten Ergebnissen führen, wenn man Strings wie Zahlen behandelt.
zum Anfang

Listen mit Perl

Die eigentliche Stärke von Perl wird durch Listen bestimmt. Perl kann Daten in Listen verpacken und verwalten.

Eine Liste (oder ein Array) besteht aus geordneten Skalaren, die mit Null beginnend nummeriert sind. Im Gegensatz zu Variablen, deren Namen stets mit einem $-Zeichen beginnen, stellt Perl einem Listennamen immer ein @ voraus. Die Skalare stehen in einer runden Klammer und sind durch Kommata getrennt.

Beispiel einer Liste:
@Tage=('gestern','1','heute','2','morgen');

Der Befehl print liest die Werte einer Liste aus:
@Tage=('gestern','1','heute','2','morgen');
print @Tage;

liefert auf den Bildschirm:
gestern1heute2morgen

Das dritte Element hat die Nummer 2. Um es in einer Variablen zu speichern, wird es durch die Nummer in eckigen Klammern herausgelesen:
@Tage=('gestern','1','heute','2','morgen'); $value=@Tage[2];
print $value;

liefert auf den Bildschirm:
heute

Aus einem Teil einer Liste kann man eine neue liste machen. Dazu werden die Nummern in eckigen Klammern ausgewählt:
@Tage=('gestern','1','heute','2','morgen'); @liste=@Tage[1,3];
print @liste;

liefert auf den Bildschirm:
12

Mit Hilfe der Elementnummer kann man einzelne Elemente der liste verändern.
@Tage=('gestern','1','heute','2','morgen'); @Tage[2]="1.5";
print @Tage;

liefert auf den Bildschirm:
gestern11.52morgen

Die Anzahl der Elemente einer Liste erhält man mit der Variablen $#listenname.
@Tage=('gestern','1','heute','2','morgen');
print $#Tage;

liefert auf den Bildschirm:
4
Achtung, in Wirklichkeit sind es 5 Elemente, weil die 0 die erste Nummer ist.

Mit der Funktion push() wird hinten ein Element oder eine Liste und mit der Funktion unshift() wird vorn ein Element oder eine Liste angefügt.
@Tage=('gestern','1','heute','2','morgen');
@liste=('übermorgen');
push(@Tage,@liste);
unshift(@Tage,'vorgestern');
print @Tage;

liefert auf den Bildschirm:
vorgesterngestern1heute2morgenübermorgen

Mit der Funktion pop() wird das letzte Element und mit der Funktion shift() wird das erste Element aus einer Liste entfernt und übergeben.
@Tage=('gestern','1','heute','2','morgen');
print shift(@Tage);
print " und ";
print pop(@Tage);
print " und ";
print @Tage;

liefert auf den Bildschirm:
gestern und morgen und 1heute2
(Die Liste hat jetzt nur noch 3 Elemente.)

Mit der Funktion slice(Liste, a, b, Elemente) wirden aus der Liste ab dem a-ten Element b Elemente durch die Elementeliste (oder durch die Nullstelle()) ersetzt. (Achtung, die Zählung beginnt bei 0.)
@Tage=('gestern','1','heute','2','morgen');
splice (@Tage, 1, 2, ());
splice (@Tage, 0, 0, ('gestern','heute'));
print @Tage;

liefert auf den Bildschirm:
gesternheutemorgen

Perl ist in der Lage, selbständig Listen von aufeinander folgenden Zahlen oder Buchstaben zu erstellen:
@liste=(10..14); bedeutet das Gleiche wie @liste=(10,11,12,13,14);.
@liste=('a'..'f'); bedeutet das Gleiche wie @liste=('a','b','c','d','e','f');.

Listen lassen sich bequem kombinieren:
@liste=(10..14);
@neueliste=(@liste,'a','b','c','d','e','f');
bedeutet das Gleiche wie
@neueliste=(10,11,12,13,14,'a','b','c','d','e','f');.
zum Anfang

Schleifen und Bedingungen

 
zum Anfang

Zusammenfassung

PHP-Übersicht
zum Anfang

PHP-Quellen

  • Johann-Christian Hanke, PHP und MySQL für Kids; mitp-Verlag Bon; 2003
  • www.selfphp.info
zum Anfang

Zusammenfassung

Perl/CGI-Übersicht
zum Anfang

Beispielscrips

environ.pl
Mit diesem Script werden die wichtigsten Umgebungsvariablen des Servers abgefragt.
zum Anfang

Quellen

zum Seitenanfang zum Workshop-Anfang zur Inhaltsübersicht