cgi-Scripts

Zum Dokumentenanfang

Inhaltsübersicht:

Einleitung
Ein paar Quellen für PERL-Skripte
PERL-Tips
Installationsverzeichnis des Perl-Interpreters
Absoluter Serverpfad
Aufruf von PERL-Skripten
HTML-Aufruf von PERL aus
Namensvergabe für PERL-Skripte
Hochladen von PERL-Skripten
PERL-Skripte ausführbar machen
HTML-Dateien schreibbar machen
Schreibberechtigung in cgi-Verzeichnissen
Server-Fehlermeldung 500
Kontakt

Einleitung

nach oben

Die heute noch am häufigsten verwendete Programmiersprache für cgi-Skripte ist PERL. Dieser Sprache - die über mächtige Werkzeuge zur Stringbearbeitung verfügt - ist im SelfHTML-Kurs von Stefan Münz ein großes Kapitel gewidmet. Reinschauen lohnt!

Der Vorteil von cgi-Skripten aus Sicht des PC- oder Apple-Benutzers ist, daß er er die Skripte einfach in jedem beliebigen Texteditor erstellen kann. Sie werden erst beim Aufrufen zeilenweise von einem Interpreter abgearbeitet (ähnlich wie das gute alte Basic anno dunnemals). Damit entfällt das Kompilieren für den Server-Rechner (meistens UNIX) - denn wer hat auf seinem Computer zuhause schon einen funktionierenden UNIX-Compiler? Außerdem ist PERL auf praktisch jedem UNIX-Server installiert.

 

Quellen

nach oben

Außerdem gibt es eine Menge vorprogrammierte cgi-Skripts (allerdings zumeist auf englisch), die man nur noch seinen Bedürfnissen anpassen muß. Einige Adressen sind (ohne jeden Anspruch auf Vollständigkeit):

Matt's Script Archive
Fluid Dynamics
Zonecoaster
XWolf (deutsch!)
Selena Sol
PERL Resource Center

 

PERL-Tips

nach oben

Hier folgen einige kurze Tips zur Verwendung von cgi-Skripts:

Die erste Zeile eines jeden PERL Skripts fragt nach dem Installationsverzeichnis des PERL-Interpreters. Standardmäßig lautet diese Zeile i.d.R:
 
#! /usr/bin/perl
 
Dies ist auch die korrekte Einstellung für die Verwendung von cgi-Skripten auf den virtuellen Akademie-Servern. Es muß die erste Zeile des Skripts sein und sie darf auf keinen Fall gelöscht werden, obwohl es streng genommen eine Kommentarzeile ist.
Auf manchen Servern liegt der PERL-Interpreter auch an folgender Stelle:
#! /usr/local/bin/perl
 
In den meisten Skripts wird als eine der Variablen der absolute Pfad zum Skript oder einer aufzurufenden / zu schreibenden Datei verlangt. Woher nehmen, da man ja nun nicht an der Eingabekonsole des Unixrechners sitzt?
Das, was man sieht, wenn man mittels FTP (siehe Lektion in Kapitel Basiswissen) Dateien auf den Server hochlädt, ist i.d.R. als Angabe ausreichend. Im Falle der virtuellen Akademie-Server wäre dies also:
 
/vserv/x/ihre_domain/cgi-bin/ihr_skript.pl   für ein cgi-Skript
/vserv/x/ihre_domain/htdocs/datei.htm   für eine HTML-Datei
 
Dabei ist ihre_domain nicht unbedingt Ihr Domainname im Browser, sondern - wie bereits gesagt - das, was Sie beim FTP-Transport an Verzeichnisstruktur sehen können. x ist auf den Akademie-Servern der Anfangsbuchstabe 
Ihrer Domain. Wenn Sie innerhalb von htdocs/ Unterverzeichnisse anlegen, muß es natürlich entsprechend heißen:
 
/vserv/x/ihre_domain/htdocs/unterverzeichnis/datei.htm   für eine HTML-Datei
 
Hierbei bitte unbedingt Groß-/Kleinschreibung beachten, die auf UNIX-Rechnern sehr wohl unterschieden wird!
Als kleine Hilfestellung liegt in gepackter Form ein PERL-Skript bei, das den absoluten Serverpfad nicht benötigt, aber so ziemlich sämtliche Umgebungsvariablen ausgeben kann. Bitte beim Ausprobieren die Punkte unten beachten!
 
Der Aufruf von PERL-Skripten erfolgt entweder direkt über einen Hyperlink oder von HTML-Dateien aus, in denen für ein Formular so etwas steht wie:
 
<form action=" (Verweis auf Ihr cgi-Skript) " ...>
 
 Dieser Verweis muß einfach folgende Form haben:
 
http://www.Ihr_Domain_Name/cgi-bin/ihr_skript.pl
 
An dieser Stelle ist Ihr_Domain_Name wirklich das, was im Browser eingegeben werden muß. Für ihr_skript.pl setzen Sie natürlich den konkreten Namen des verwendeten Skripts ein - wieder unter Beachtung von Groß-/Kleinschreibung.
 
Manchmal ist der Aufruf von HTML- oder Bilddateien von PERL-Skripten aus erforderlich. Wenn man hierbei auf "Nummer Sicher" gehen will, gibt man den vollständigen Pfad zu der betreffenden HTML-/Bilddatei an:
 
http://www.Ihr_Domain_Name/ihr_logo.gif
 
Bei der Namensvergabe für PERL-Skripte sollte man es entweder bei der Endung .pl belassen oder man kann sie auf .cgi ändern. Natürlich muß sowohl im Skript wie auch ggf. in der aufrufenden HTML-Datei konsistent mit den Namen umgegangen werden.
 
Beim Hochladen von PERL-Skripten mittels FTP auf den Server gibt es einen kleinen Stolperstrick: Sie müssen immer im ASCII-Modus transferiert werden!
Der Grund: Beim Dateitransport im normalerweise voreingestellten Binärmodus werden die Zeilenumbrüche am Ende jeder Zeile von Win(DOS) aus als CarriageReturn-Linefeed (ASC-10 ASC-13) übertragen, was den PERL-Interpreter komplett durcheinanderbringt, da auf Unix-Systemen der Zeilenumbruch nur durch ein Linefeed (ASC-10) dargestellt wird und der Wagenrücklauf in Scripten als illegales Zeichen interpretiert wird.
 
Nach dem Hochladen muß das PERL-Skript für jeden Benutzer ausführbar gemacht werden. An der UNIX-Konsole würde man dazu eingeben:
 
chmod 755 skriptname.pl
 
In Ihrem FTP-Programm sollte es eine entsprechende Möglichkeit geben. Bei WS-FTP z.B. kann man den entsprechenden Befehl losschicken, indem man:
die Datei auf dem Server markiert
mit der rechten Maustaste das Kontextmenü aufruft
den Punkt chmod wählt
drei mal execute ankreuzt (an der vorhandenen Leseberechtigung bitte nichts ändern!)
mit Ok bestätigt
Der UNIX-Rechner gibt üblicherweise eine kleine Bestätigung, daß der chmod-Befehl erfolgreich war.

Auch das Verzeichnis, in dem das cgi-Script gespeichert ist, muß i.d.R. ausführbar gemacht werden.

Anmerkung: Auf den meisten Servern müssen Scripte in das Verzeichnis cgi-bin (neben dem Verzeichnis htdocs) gespeichert werden
Der Aufruf für den Webbrowser erfolgt dann mittels:  
http://www.Ihr_Domain_Name.de/cgi-bin/skriptname.pl
 

Wenn in irgendwelche HTML-Dateien permanent geschrieben werden soll (Gastbuch, Bulletin-Board, Einkaufsliste ...), so muß auch dies wieder gestattet werden. Der UNIX-Befehl dazu lautet:
 
chmod 666 datei.html
 
Im FTP-Programm verläuft es analog zu oben. Also z.b. für WS_FTP, indem man:
die Datei auf dem Server markiert
mit der rechten Maustaste das Kontextmenü aufruft
den Punkt chmod wählt
drei mal write ankreuzt (an der vorhandenen Leseberechtigung bitte nichts ändern!).
mit Ok bestätigt
Der UNIX-Rechner gibt üblicherweise eine kleine Bestätigung, daß der chmod-Befehl erfolgreich war.
 

Anmerkung: I.d.R. müssen auch die Verzeichnisse, in die Dateien geschrieben werden sollen, auf chmod 777 gesetzt werden.

Ein Verzeichnis, in dem ein ausführbares cgi-Script gespeichert ist, darf keine öffentliche Schreibberechtigung haben. Auslöser dafür sind einleuchtende Sicherheitsgründe: Mit einem Fünfzeiler könnte jemand gesamte Verzeichnisse ins elektronische Nirwana befördern. Und ein solches Script könnte ohne Probleme in ein für öffentlichen Schreibzugriff freigegebenes Verzeichnis gespeichert und dann ausgeführt werden. Hier schiebt deshalb der Server einen Riegel vor.
 
Wenn die obigen Punkte beachtet worden sind und beim Testen des Skripts gibt es die aussagekräftige Server-Fehlermeldung 500 (irgendein Skriptfehler) so wird dies sehr oft daran liegen, daß bei der HTML-Ausgabe (irgendetwas möchte man schließlich als Ergebnis des Skripts im Browser sehen) Zeichen verwendet worden sind, die auch als PERL-Steuerzeichen verwendet worden sind.
Die wichtigsten dieser Zeichen sind:
\
#
@
"
;
%
$

Natürlich werden diese Zeichen auch im HTML-Code benötigt. Damit der PERL-Interpreter nicht durcheinanderkommt, muß ihnen dann jeweils ein Backslash ( \ )vorangestellt werden. Für eine als Verweis in einer HTML-Datei angegebenen email-Adresse liest sich das dann etwa folgendermaßen:
 
print "<a href=\"mailto:support\@akdademie.de\">support\@akademie.de</a>\n";
 
Wenn man die zu PERL gehörenden grün markierten Teile wegnimmt, hat man einfach den folgenden Hyperlink, bei dem man jede Frage ausführlich beantwortet bekommt:
 
support@akademie.de
 
(Das \n" am Ende der Zeile bewirkt einfach wie bei Javascript einen Zeilenumbruch. Damit sieht der Source-Code der erzeugten HTML-Datei dann etwas übersichtlicher aus und besteht nicht nur aus einer riesenlangen Spaghetti-Zeile)
 
Um zum Thema zurückzukommen: Serverfehlermeldung 500. Wenn alle sonstigen Punkte stimmen, sollte man sein Skript darauf überprüfen, ob evt. unmaskierte Steuerzeichen (kein vorangestellter Backslash) in der auszugebenden HTML-Datei vorkommen. Ggf. kann man dazu sein Skript auch aufsplitten und jeweils nur eine kleine Ausgabe testen (wobei natürlich immer der Kopf und Fuß der HTML-Datei mitgeschrieben werden muß). So läßt sich der Fehler eingrenzen.

 

Kontakt

nach oben

Das war's schon als kleine Hilfestellung zur Benutzung von PERL-Skripten. Sollten alle Stricke reißen, steht der Autor dieses Leitfadens gerne für Fragen zur Verfügung. Eine kleine Bitte dabei aber vorab: Obige Punkte wirklich gründlich durchgehen - Danke!

Therese Telepski
support@gb-direkt.de
http://www.gb-direkt.de