home news develop kontakt produkte service info linx umwelt schule
   Frank Petersen Softwareentwicklung
 

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;=)

Google
 

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.

 

CGI
CGI Howto