# CGI-Scripts auf öffentlichem Webserver installieren

| CGI-Verzeichnis mit FTP-Zugriff verwalten Tipps für die Praxis Probleme bei der Ausführung von CGI-Scripts auf dem Server

## CGI-Verzeichnis mit FTP-Zugriff verwalten

Wenn Sie nicht gerade einen eigenen öffentlichen Webserver betreiben, den Sie direkt an der Konsole bedienen können, sind Sie darauf angewiesen, Ihre Daten auf dem Server-Rechner "per Fernbedienung" zu verwalten. Normalerweise geschieht das heutzutage mit Hilfe des FTP-Protokolls. Für die FTP-Verwaltung von eigenen Daten auf einem Server-Rechner sollten Sie ein gutes FTP-Programm besitzen. Im Link-Verzeichnis des Online-Angebots von SELFHTML aktuell finden Sie eine Produktübersicht mit Links zu FTP-Programmen:

SELFHTML-Linkverzeichnis: FTP-Programme

CGI-Scripts können Sie mit Hilfe eines FTP-Programms in das dafür vorgesehene CGI-Verzeichnis hochladen. Meistens hat dieses Verzeichnis einen entsprechenden Namen, z.B. cgi-bin. Die Server-Administration oder der Provider muss Ihnen ein solches Verzeichnis eingerichtet haben. Das bedeutet, auf dem öffentlichen Server-Rechner muss in den Einstellungen des Webservers ein solches Verzeichnis angegeben sein, und Ihnen muss der Zugriff darauf erlaubt sein. Fragen Sie im Zweifelsfall die Server-Administration oder den Provider danach! (Allgemeines zu diesem Thema finden Sie auch im Abschnitt Web-Projekte publizieren).

Beim Hochladen von CGI-Scripts oder CGI-Programmen in das CGI-Verzeichnis müssen Sie folgendes beachten:

- Perl-Scripts müssen immer im ASCII-Modus übertragen werden. Achten Sie vor dem Hochladen von Perl-Dateien darauf, dass in Ihrem FTP-Programm der ASCII-Modus als Übertragungsmodus eingestellt ist.
- Kompilierte und gelinkte Programme müssen dagegen immer im Binärmodus übertragen werden. Achten Sie im FTP-Programm darauf, dass der Binärmodus eingestellt ist. Beachten Sie bei kompilierten und gelinkten Programmen auch, dass diese auf dem Server-Rechner nur ausführbar sind, wenn sie für das Betriebssystem des Server-Rechners kompiliert und gelinkt wurden. So hat es keinen Sinn, wenn Sie ein unter DOS/Windows zu einer EXE-Datei kompiliertes C-Programm in das CGI-Verzeichnis eines Unix-Rechners hochladen.
- Einige Webserver sind so eingerichtet, dass CGI-Scripts die Dateinamenendung .cgi erhalten müssen. Fragen Sie gegebenenfalls Ihren Provider danach! Wenn dies bei Ihnen der Fall ist, benennen Sie beispielsweise ein Perl-Script namens counter.pl einfach in counter.cgi um.
- Wenn der Server-Rechner unter Unix (z.B. Linux) läuft, müssen Sie außerdem noch angeben, von wem die Programmdatei bzw. die Scriptdatei ausgeführt werden darf. Damit alle Besucher Ihrer Web-Seiten Ihr CGI-Script oder CGI-Programm ausführen können, müssen Sie das Lese- und Ausführrecht "für alle" einstellen. Dies geschieht mit dem Unix-Befehl `chmod 755 datei.ext`. Wenn Sie beispielsweise ein Perl-Script namens counter.pl hochladen, müssen Sie es mit `chmod 755 counter.pl` allgemein ausführbar machen. Lesen Sie im Zweifelsfall in der Dokumentation Ihres FTP-Programms nach, wie Sie damit die Zugriffsrechte für Dateien auf dem fernen Rechner einstellen können.

## Tipps für die Praxis

Die folgenden Hinweise und organisatorischen Überlegungen sollten Sie beachten:

- Testen Sie Ihre CGI-Scripts bzw. CGI-Programme vor dem öffentlichen Einsatz im WWW. Am besten tun Sie das offline und in aller Ruhe an Ihrem lokalen Rechner. Dazu müssen Sie sich einen eigenen lokalen Webserver installieren. Wenn Sie Perl-Scripts einsetzen wollen, müssen Sie außerdem Perl lokal installieren.
- Rufen Sie neu ins WWW hochgeladene CGI-Scripts/CGI-Programme nicht gleich von einer viel besuchten Web-Seite aus auf, sondern laden Sie erst eine Test-HTML-Datei mit einem Aufruf des CGI-Programms hoch. So können Sie auch online erst einmal testen, ob alles einwandfrei funktioniert. Wenn es sich um wichtige Anwendungen wie elektronische Einkaufskörbe usw. handelt, sollten Sie das Script in so einer Testumgebung von verschiedenen Personen testen lassen, bevor Sie es öffentlich zur Verfügung stellen.
- Die meisten CGI-Scripts speichern Daten in Dateien und/oder lesen diese Dateien aus. Wenn es sich um eine einzige Datendatei handelt, spricht nichts dagegen, diese im CGI-Verzeichnis abzulegen. Bei einem einfachem Seitenzugriffszähler, der mit Hilfe eines Perl-Scripts namens counter.pl realisiert wird, ist es beispielsweise sinnvoll, den Zählerstand in einer Datei counter.dat zu speichern und diese ebenso wie die Perl-Datei direkt im CGI-Verzeichnis abzulegen. Wenn ein CGI-Script/CGI-Programm jedoch mehrere Dateien verwaltet, ist es sinnvoll, diese in einem eigenen Verzeichnis abzulegen. Dazu können Sie z.B. unterhalb des CGI-Verzeichnisses Unterverzeichnisse anlegen. So könnte etwa ein CGI-basiertes Nachrichtenforum (Bulletin-Board) namens bulletin.pl seine verschiedenen Konfigurations- und aktuellen Datendateien in einem entsprechenden Unterverzeichnis bulletin haben.

## Probleme bei der Ausführung von CGI-Scripts auf dem Server

Es gibt viele Gründe, warum CGI-Scripts auf öffentlichen Webservern manchmal nicht oder nicht sofort funktionieren. Die folgende Checkliste kann helfen, einige typische Fehler zu vermeiden:

- Falls Sie beim Aufruf des CGI-Scripts einen Fehler mit der Nummer 500 (Internal Server Error) erhalten, kann dies auf einen Syntaxfehler im Perl-Script hinweisen. Notieren Sie dazu im Perl-Script vor anderen konkreten Anweisungen zunächst folgendes :
  `use CGI::Carp qw(fatalsToBrowser);`
  Dadurch erreichen Sie, dass Fehlermeldungen des Perl-Interpreters direkt im Browser-Fenster erscheinen. Falls es noch Fehler im Perl-Script gibt, haben Sie es damit leichter, die Fehlerursache zu finden. Der Fehler mit der Nummer 500 kann aber auch andere Ursachen haben. Kontrollieren Sie z.B., ob das Perl-Script auch wirklich im ASCII-Modus mit FTP zum Server übertragen wurde. Stellen Sie sicher, dass Sie in dem Perl-Script keine Anweisungen stehen haben, die auf dem Server-Rechner nicht funktionieren (z.B. Aufruf betriebssystemspezifischer Funktionen, Verwendung spezieller Perl-Module, die nicht zum Standard gehören und auf dem Server nicht installiert sind usw.). Überprüfen Sie, ob in der ersten Zeile des Perl-Scripts der richtige Pfad zum Perl-Interpreter angegeben ist.
  Wenn Sie Zugriff auf die Error-Log-Datei Ihres Webservers haben, ist es auf jeden Fall empfehlenswert, dort nachzuschauen. Im Error-Log werden alle Fehler, die während des Server-Betriebs aufgetreten sind, mitgeschrieben. So haben Sie die Möglichkeit, im Zweifelsfall die genaue Fehlerursache zu lokalisieren.
- Falls Sie beim Aufruf des CGI-Scripts einen Fehler mit der Nummer 404 (Document not found) erhalten, überprüfen Sie Groß- und Kleinschreibung von Dateinamen auf dem Server, wenn der Server-Rechner unter einem Unix-Betriebssystem läuft. Wenn Sie in einem HTML-Formular beispielsweise notiert haben:
  `<form action="/cgi-bin/auswert.cgi">`,
  dann muss die Datei im CGI-Verzeichnis auch tatsächlich auswert.cgi heißen und nicht etwa Auswert.cgi.
- Falls Sie beim Aufruf des CGI-Scripts einen Fehler mit der Nummer 403 (Forbidden) erhalten, überprüfen Sie, ob das Script, falls der Webserver unter einem Unix-Betriebssystem läuft, mindestens die Rechte `755` hat. Ändern Sie die Rechte gegebenenfalls mit dem `chmod`-Befehl im FTP-Programm.
- Falls Sie beim Aufruf des CGI-Scripts eine Fehlermeldung Premature end of script headers erhalten, überprüfen Sie im Quellcode des Perl-Scripts die Ausgaben, die das Script senden soll. Es muss irgendetwas ausgeben, und zu Beginn dieser Ausgaben muss ein gültiger HTTP-Header notiert sein. Typischerweise geschieht das bei HTML-Ausgaben durch einen Befehl wie:
  `print "Content-type: text/html\n\n";`.

| CGI-Umgebungsvariablen
| CGI und HTML

© 2007 Impressum