|
Diese
Seite erklärt die Installation von CGI-Programmen und hilft bei der
Fehlerbeseitigung. Bei weiteren Fragen können Sie sich gerne
an uns wenden. Wir nehmen diese Fragen dann ggf. hier mit auf. Diese
Seite ist kostenlos und kann frei weitergegeben werden.
|
Inhalt: |
Inhalt
Vorraussetzungen für CGI
Chmod, was soll das?
notwendige Informationen
Informationen erhacken
Telnet
Unix Shell
Skripte anpassen
Fehler 500, was tun?
Fehlersuche mit Perlcheck
Upload per FTP
Testen des Skripts
Buchempfehlung
|
|
Vorraussetzungen: |
Zum Installieren von CGI-Scripten benötigt man einen Webserver und
die Berechtigung darauf Perl-Programme laufen lassen zu dürfen. Meist
erkennt man derartige Server daran, dass sie ein "cgi-bin"-Verzeichnis
haben.
Ein
einfaches Erstellen eines cgi-bin -Verzeichnisses auf Ihrem Server bringt
keinen Erfolg, da das Verzeichnis als cgi-Verzeichnis beim Provider angemeldet
sein muß. AOL und T-Online u.ä. bieten übrigens keine Möglichkeit
zur Ausführung von eigenen CGI-Scripten.
Am
weitesten sind Unix-Web-Server (z.B. Apache) vertreten. Wir beschränken
uns deshalb auf solche Server, die meisten Informationen lassen sich auch
auf andere Webserver übertragen. Bei der Verwendung auf NT-Servern
sollten interne Dateizugriffe geändert werden von / auf \ wie es im
Windows üblich ist. Zum Beispiel: /vserv/i/interne2 wird auf einem
NT-Server \vserv\i\interne2.
|
|
Was ist chmod: |
Chmod ist ein Unixkommando, mit dem der Zugriffsstatus von Dateien
eingestellt werden kann und entspricht im wesentlichen dem attrib –Befehl
von DOS. Man kann eine Datei z.B. schreibschützen, oder generell für
alle Benutzer ausblenden, oder auf Ausführbar setzen.
Unix
bietet mehrere Stati an. Grundsätzlich unterscheidet UNIX bei jeder
Datei/Verzeichnis unter folgenden Gruppen: Besondere Gruppe, Einzelnutzer,
alle Anderen. Standardmäßig sind alle Dateien die Sie auf den
Webserver spielen auf lesbar für alle Benutzer eingestellt d.h.
lesbar für Besondere Gruppe, Einzelnutzer, alle Anderen. Man kann
nun z.B. die Lesbarkeit für alle Anderen sperren, dann dürfen
nur noch geschlossene Benutzergruppen und der Webmaster die Dateien lesen.
Normalerweise
ist jede Datei die auf den Rechner gespielt wird mit CHMOD 644 als Dateiattribut
versehen, d.h. sie kann von jedem gelesen und nur vom Webmaster geschrieben
werden.
Zusätzlich
zu den drei Personengruppen, gibt es drei Zugriffsstati: Lesen, Schreiben
und Ausführen. Jeder Personengruppe, kann nun eines/oder mehrere der
drei Stati zugewiesen werden. Insgesamt ergibt das dann ein Raster (z.B.
chmod 644):
Master Gruppe Anderen
4
= Lesen
x
x
x
2=Schreiben
x
1=Ausführen
Durch
die UND-Verknüpfung der vorangestellten Zugrifsstati kann ein bestimmter
Zugriff angegeben werden. Also angenommen der Master soll die Datei Lesen/Schreiben
und Ausführen dürfen, dann wird 7 für den Master gesetzt.
Wird nun CHMOD 700 dateiname.ext angegeben, ist die Datei nur für
den Webmaster lesbar, schreibbar und ausführbar sollen die Benutzergruppe
und die Anderen auch noch lesen/ausführen dürfen ergibt sich
755!
Je
nach verwendetem FTP-Programm kann CHMOD verschieden angegeben werden.
Bei
WS_FTPPro z.B. kann dies durch auswählen der Datei mit einem Mausklick
und danach die rechte Maustaste (Auswahl CHMOD) geschehen.
Bei
FTP-Explorer geschieht es durch die Eingabe eines Quote-Befehls, in diesem
Fall
"site
chmod 755 datei.ext".
Das
Attribut kann auch mit Telnet (siehe Abteilung Telnet) mit dem Befehl "chmod
755
datei.ext" angegeben werden.
Es
sollte beachtet werden, daß unter Unix die Zugriffszuweisung nicht
mit Wildcards erfolgen kann! Also, "chmod 755 *.cgi" geht nicht, außer
bei Telnet zugriffen, die lassen es teilweise zu.
Einige
Provider verbieten chmod 777 in dem Fall ersetzen Sie evtl. das geforderte
Attribut 777 auf 755! Wenn dem so ist, erscheint übrigens eine entsprechende
Fehlermeldung.
Bei
einigen Installationen kann es vorkommen, daß man kurzfristig ein
Verzeichnis wie z.B. cgi-bin auf 777 setzen muß. Es ist unbedingt
darauf zu achten, daß nach Beendigung der Sitzung der Wert wieder
auf 755 zurück gestellt wird, ansonsten kann es zu Ablauffehlern kommen.
|
|
Informationen: |
Grundsätzlich sollte Ihr Provider beim Anmelden oder kurz danach Ihnen
einige Verzeichnisnamen für CGI-Zugriffe angeben. Einige Provider
lösen dies durch eine allgemeine CGI-Installations-Hilfs-Datei . Sollten
Ihnen derzeit die Informationen nicht zur Verfügung stehen, oder Ihr
Provider antwortet mal nicht auf div. eMails, schauen Sie bitte bei
Informationen selbst beschaffen.
Grundsätzlich
sind für die meisten Installationen folgende Informationen wichtig:
-
Unix-Pfadangabe
für Mailer (sendmail)
- Unix-Pfadangabe
für Datum/Zeit (date)
- Unix-Pfadangabe
für cgi-bin
- Unix-Pfadangabe
für HTML-Dateien
- Unix-Pfadangabe
für Perl bzw. andere Interpreter
- Version
des Perl-Interpreters
- ggf.
Verwendete Unix-Version bzw. Webserver
Fragen
Sie Ihren Provider nach o.g. Verzeichnissen, er wird Sie Ihnen dann sicherlich
schnell zur Verfügung stellen.
|
|
Hacken: |
Sollten Sie diese Information nicht besitzen, so wenden Sie sich an Ihren
System-Administrator. Antworten diese auf Frage eMails nicht , dann muß
man sich selbst die Informationen besorgen, bzw. nach dem Trial and
Error Prinzip arbeiten.
Am
leichtesten kommt man mit "locate pfad" (mit Telnet) an die Informationen.
Dies setzt jedoch voraus, daß man einen Telnet Zugriff hat!
Was wohl bei den wenigsten Servern der Fall ist.
Sonst
hilft nur noch Probieren:
Perl
befindet sich häufig in /usr/bin/perl oder /usr/lib/perl5, Sendmail
ist meist in /usr/lib/sendmail oder /usr/bin/sendmail oder /bin/sendmail.
Date hab ich noch nie woanders gesehen als in /bin/date. Die Pfade zu den
eigenen Verzeichnissen kann man meistens bei einem FTP-Zugang sehen.
Gehen
Sie dazu mit ihrem FTP-Programm auf Ihrem Server online, wechseln Sie in
das Verzeichnis, in dem die HTML-Dateien stehen. Nun steht oben das komplette
Verzeichnis z.B. /www/180/htdocs, oder /www/acc41 oder /vserv/i/interne2/htdocs
je nachdem wie Ihr Provider die Struktur aufgebaut hat.
Bei
dem CGI-BIN Verzeichnis gilt natürlich dasselbe, wechseln Sie in das
Verzeichnis und schreiben sich den oben stehenden Pfad auf.
|
|
Telnet: |
Sehr angenehm ist es, wenn der Provider einen Telnet-Zugang erlaubt. Wobei dieser
auch grundsätzlich mit Vorsicht zu genießen ist. Alle Befehle
werden in Kleinbuchstaben eingegeben.
Die
prinzipielle Funktionsweise von Telnet-Zugängen ist die als würden
Sie an der Konsole sitzen und auf der Unix-Shell (direkt auf dem Prompt wie bei DOS) arbeiten.
Ein
Programm zur Benutzung von Telnet liegt Windows und allen Unixderivaten
bei und heißt sinnigerweise telnet. Bei Serververbindung wird der
Domainname eingetragen (z.B. IhrName.de). Nach erfolgreicher Verbindung
wird man beim Login nach Name und Paßwort gefragt. Dies ist der selbe
Name und das selbe Paßwort wie beim Zugang mit einem FTP-Programm.
Nach
erfolgreichem Login befindet man sich meist in seinem eigenen Verzeichnis.
|
|
Unix Shell: |
Hier einige Unix-Befehle die an dieser Stelle verwendet werden können.
„ls“
zeigt das aktuelle Verzeichnis (ähnlich "dir" in DOS)
„cd
pfadname“ wechselt in das angegebene Verzeichnis (genau wie bei DOS)
wobei ".." in das nächst höhere Verzeichnis wechselt. Zu beachten
ist, daß Unix Rechner
grundsätzlich
Groß-/Kleinschreibung beachten z.B. "cd CGI-BIN" funktioniert nur,
wenn CGI-BIN auch aus Großbuchstaben besteht. Die unter DOS üblichen
"\"
(Backslash,
Rückwertsschrägstrich) gibt es in der Form nicht es wird ein
normaler "/"
(Slash,
Schrägstrich) verwendet.
chmod
### dateiname.ext ändert den Zugriffsstatus. Siehe auch "chmod"
weiter oben.
locate
pfad/datei Locate gefolgt von einem Verzeichnisnamen oder einem Dateinamen
findet dieses auf dem Server. Beispiele: locate sendmail, locate
date, locate error_log usw.
|
|
Script anpassen: |
Die
meisten Scripte müssen angepaßt werden. Dazu hat es sich eingebürgert,
daß den Anfang der Scripte die Variablen belegen, bzw. dort definiert
werden.
Welcher
Editor: Bei der Auswahl eines geeigneten Editors sollte man bei CGI-Scripten
sehr aufpassen. Einige Editoren wie z.B. Frontpage zerstören gnadenlos
den Source-Code. Ein mit dem Programm aufgerufenes/abgespeichertes Script
wird niemals auf Ihrem Server laufen.
Notepad
(Editor von Windows) konvertiert nicht automatisch das Zeilenende richtig.
Am
erfolgreichsten können Programme wie edit.exe (aus DOS) oder HomeSite
eingesetzt werden, die Ihren Source in der Regel nicht zerstören.
Es gibt allerdings auch noch andere Programm-Editoren die geeignet sind.
Häufig
sind im Skript Einstellungen über die Funktionsweise des Skriptes
vorzunehmen und es werden reale Pfadangaben erwartet, bzw. URLs vorhandener
Dateien/Verzeichnisse. Die meisten Scripte kommentieren dies in einem Text
über der zu ändernden Variablen.
Texte
mit vorangestellter # dienen nur als Kommentar und werden nicht ausgeführt.
Je
nach Programmierstil des jeweiligen Autors werden innerhalb des Skriptes
Bildschirmausgaben gemacht, bzw. eMails versendet. Bei einigen Autoren
befindet sich die Ausgabe am Ende hinter dem mit _END_ gekennzeichneten
Bereich.
Ausgaben
innerhalb des Skriptes sind mit dem Befehlswort "print" vorangestellt.
Der
dem
Wort "print" folgendem Text kann geändert werden. Dazu ist aber zu
beachten, daß die Ausgabe zunächst in Anführungszeichen
steht. z.B. print "Dies ist eine
Ausgabe\n";
In diese ausgaben können HTML-Befehle mit einfließen z.B. print
"<b>fett</b>
wurde das Wort nun geschrieben\n"; am Ende einer Print-Anweisung folgt
meist ein \n welches einem Zeilenwechsel entspricht. Außerdem wird
jede Perl-Befehlszeichen durch ein Semikolon abgeschlossen.
Innerhalb
einer Printanweisung können auch Anführungszeichen stehen, die
z.B. in HTML-Codes wichtig sein könnten wie z.B. print "<href=\"test.html\"
name= \"test\">\n";
Sollen
nun HTML-Ausgaben eingefügt oder geändert werden, ist peinlichst
genau darauf zu achten, daß die HTML-Angaben OHNE Anführungszeichen
einfließen.
Hier
ein Beispiel:
falsch:
print "<img src="http://ihredomain.de/banner.gif" name="banner">";
richtig1:
print "<img src=http://ihredomain.de/banner.gif name=banner>\n";
richtig2:
print "<img src=\"http://ihredomain.de/banner.gif\" name=\"banner\">\n";
Alle
Anführungszeichen aus den HTML-Anweisungen müssen entfernt werden,
sonst kommt es zu einem Error 500 und das Script kann nicht ausgeführt
werden! Also, äußerste Vorsicht! Alternativ ist es auch möglich
einen \ vor das Anführungszeichen zu stellen, wie vorher im Absatz
benannt (Dies gilt auch für andere Sonderzeichen (z.B. $, @ usw.).
|
|
Lesen: |
Weitere
Informationen findet man in diesem wirklich guten Buch. Perl . Einführung, Anwendung, Referenz von Farid Hajji
Addison-Wesley (15. Oktober 1999).
Einziger Nachteil des Buches: über 1000 Seiten. Ein sehr empfehlenswertes Arbeitshandbuch zum Erlernen des Gebrauchs von Perl.
|
|
Fehler 500: |
Die meisten Fehlermeldungen sind relativ eindeutig, z.B. 404 File not Found bedeutet, daß
etwas nicht gefunden wurde. Es gibt da aber noch den Fehler 500 Error running script inform Webmaster@domain.de
... Hier eine Liste der möglichen Fehlerursachen:
-
Wurden
alle Zugriffsrechte ordnungsgemäß vergeben? (siehe chmod)
-
Wurden
alle .cgi / .pl - Dateien mit ASCII als Protokoll upgeloadet?
- Wurden
in evtl. geänderten Printanweisungen wirklich die Anführungszeichen
innerhalb der Ausgaben entfernt? (öffnen der Datei und Suche
nach " dann immer weitersuchen, es muß zu jedem öffnenden "
auch ein schließendes existieren).
- Steht
hinter jeder Printanweisung ein ; ?
- Sind
Zugriffsrechte auf Verzeichnisse gesetzt?
- Wurde
chmod 777 cgi-bin wieder zurückgesetzt auf chmod 755 ?
- Läuft
das Script evtl. seit der Änderung nicht mehr, oder schon im Original?
- Sind
alle Verzeichnisse fehlerfrei angegeben?
- Sind
Zugriffsrechte aller beteiligten Dateien (z.B. Ausgabedateien wie guestbook.html) richtig gesetzt?
- Steht
hinter jeder Zeile ein echtes Return (CR/LF) öffnen der Datei mit
edit.exe aus DOS. Und evtl. Returns einfügen.
- Steht
hinter der letzten Zeile einer Parameterdatei bzw. der CGI-Datei auch ein
Return?
- Unterstützt
der Webserver überhaupt .cgi-Dateien? sonst den Versuch starten auf
.pl umzubenennen. Dabei aber unbedingt alle Dateien mit ändern, die
auf diese Datei zeigen.
- Sind
alle Dateinamen EXAKT in Groß-/Kleinschreibung angegeben?
|
|
Perlcheck: |
Installieren des Programms Perlcheck um das Programm zu testen. Nach erfolgreicher Installation
des Programms einfach den Dateinamen mit relativem Pfad angeben. z.B. guestbook/guest.cgi,
wenn die Datei im gleichen Verzeichnis ist wie Perlcheck muß nur
der Dateiname angegeben werden.
Suchen
der Datei error_log auf dem Webserver (entweder mit Telnet "locate
error_log" oder ggf. mit FTP-Programm suchen, z.B. in /usr/log oder /bin/log.
Das funktioniert aber nur, wenn der Provider überhaupt einen Zugriff
ermöglicht. Ansonsten per eMail anfragen. error_log-Dateien können
sehr groß sein, 5-20 MB sind keine Seltenheit. Die muß man
sich dann wohl erst einmal downloaden, um an die letzte Zeile (nämlich
die letzte Fehlermeldung) heranzukommen. Ggf. Webserver Software
prüfen, ist die benötigte Perl-Version vorhanden? Stimmen die
Angaben des Autors mit den Betriebssystemangaben zusammen?
Wurde
der richtige Aufruf verwendet (POST/GET)? Wenn Telnet-Zugriff möglich,
dann kann das Script auch von der commandline (prompt) gestartet werden.
In dem Fall werden evtl. Fehlermeldungen bei Abbruch sofort ausgegeben.
|
|
Upload: |
Die CGI-Dateien müssen in das Verzeichnis /cgi-bin des Webservers
kopiert werden. Bei einigen Scripten ist es Sinnvoll Unterverzeichnisse
von /cgi-bin zu erzeugen, und die Dateien dorthin zu kopieren.
Dabei
ist genaustens die richtige Schreibart zu beachten (Groß-/ Kleinschreibung).
Wenn
Unterverzeichnisse angelegt werden, müssen selbstverständlich
alle Dateien, die auf das Script zugreifen (die HTML-Dateien insbesondere)
auch um dieses Unterverzeichnis ergänzt werden. z.B. bei der
Verwendung eines Gästebuches muß in das Formular bei <form
action=/cgi-bin/unterverzeichnis/guestbook.cgi ....>
angegeben
werden. Auch bei der Installation innerhalb des Scriptes und seiner Konfigurationsdateien
ist es unerläßlich, daß bei den Pfadangaben das Unterverzeichnis
mit angegeben wird.
Alle
CGI-Dateien bzw. .pl-Dateien müssen als ASCII-Upload eingespielt werden.
Bei den Programmen ws_ftp pro und ftpx gibt es dafür im Setup-Bereich
eine Möglichkeit, bei der automatischen Erkennung die Dateiendungen
zu spezifizieren, welche in ASCII (also nicht Binär) upgeloadet werden
sollen. Sinnvoll sind hier mindestens folgende Angaben: ".htm, .html, .dhtml,
.shtml, .cgi, .pl, .txt, .asp" evtl. sind auch noch weitere Dateiendungen
dort sinnvoll, je nach verwendeten Dateien.
Alle
gif und jpg - Dateien müssen in Binär-Upload eingespielt werden.
Die meisten Server sind so eingerichtet, daß ein Zugriff auf
Grafikdateien und HTML/txt-Dateien innerhalb des cgi-bin-Verzeichnisses
nicht möglich ist. Diese Dateien müssen dann in dem Bereich eingespielt
werden, wo sich die anderen HTML-Dateien befinden. Klug ist es dafür
ein gleichnamiges Unterverzeichnis (wie bei cgi-bin) zu erstellen, wo derartiges
abgelegt wird.
|
|
Testen: |
Wenn die Installation als solches erfolgreich war, können Die Programme
getestet werden. Einige Programme benötigen div. Aufrufparameter,
diese können mit folgender Syntax eingegeben werden.
Beispiel:
http://ihredomain.de/cgi-bin/gastbuch/guestbook.pl?name=meier&
email=mail@petersen.de&ort=hamburg&kommentar=hello
world
Wesentlich
einfacher ist es natürlich die vorbereitete HTML-Datei aufzurufen.
|
Diese Seite wird nicht mehr gepflegt, eine aktuellere Version dieser Seite befindet sich hier. Immer noch nichts gefunden? Gut, dann am besten nochmal auf dieser Seite oder im Netz suchen;=)
Diese
Informationen basieren im wesentlichen auf unseren Erfahrungen. Als Hilfe
hat sich dabei das Skript von Knud Schiffmann erwiesen, das wir als Vorlage
für diese Seite benutzt haben (danke Knud). Weitere Quellen finden sich bei CGILINX.
HTML & Web-Publishing Handbuch Gesamtpaket, 2 Bde. m. CD-ROM
Stefan Münz, Wolfgang Nefzger, 2002
Franzis Verlag; ISBN: 3772375170
Ähnliche Informationen wie auf dieser Seite finden sich in diesem Buch.
Das HTML und Web-Publishing Handbuch von HTML-Papst Stefan Münz bietet neben einer klaren
und gut strukturierte Einführung in HTML 4.01 und XHTML 1.0/1.1, die international gültigen Standards
zur Auszeichnung von Webseiten (u.A. Cascading Stylesheets (CSS), Dynamisches HTML und JavaScript).
Hie finden Fortgeschrittene Informationen um serverseitige, dynamische Perl-Anwendungen für die CGI-Schnittstelle zu programmieren
und XML-basierte Datenstrukturen zu entwerfen.
Absolut lesenswert für alle, die fundierte Grundlagen suchen ohne dafür ein Studium absolvieren zu müßen.
|
 |