CGI's (Common Gateway Interface) ist einfach Ausgedrückt eine Schnittstelle, womit man Anwendungen für das Internet schreiben kann. Diese CGI-Anwendung laufen dabei auf einem (Web)Server (wie Beispielsweise dem Apache) und wird von einer HTML-Webseite angesteuert. Die Daten erhält diese CGI-Anwendung entweder von der HTML-Seite selbst (POST-Verfahren) oder direkt über die URL (GET-Verfahren). C C++ C/C++ CGI mit C CGI Skripte in C CGI mit C- CGI Skripte in C Kapitel 27: CGI in C

CGI (Common Gateway Interface) ist einfach ausgedrückt eine Schnittstelle, mit der Sie z.B. Anwendungen für das Internet schreiben können.

27.1. Was ist CGI?            zurück  Ein Kapitel tiefer  zum Inhaltsverzeichnis

Im Laufe dieses Kapitels werden Sie diese Frage detaillierter beantwortet bekommen, aber ein kurzer Anriss des Themas wird schon hier gegeben. Ein CGI (Common Gateway Interface) ist eine Schnittstelle, mit der Sie z.B. Anwendungen für das Internet schreiben können. Diese CGI-Anwendungen laufen dabei auf einem (Web-) Server (wie beispielsweise dem Apache) und werden von einer HTML-Webseite meist mithilfe eines Webbrowsers aufgerufen. Die Daten erhält diese CGI-Anwendung entweder von der HTML-Seite selbst (POST-Verfahren) - beispielsweise über ein Eingabeformular - oder direkt über die URL (GET-Verfahren).

Das Verfahren der CGI-Schnittstelle ist ziemlich einfach. Die Daten werden ganz normal von der Standardeingabe (stdin) oder von den Umgebungsvariablen empfangen und wenn nötig über die Standardausgabe (stdout) ausgegeben. Meistens handelt es sich dabei um ein dynamisch erzeugtes HTML-Dokument, das Sie in Ihrem Browser betrachten können. Sind diese Voraussetzungen gegeben, können CGI-Anwendungen praktisch mit jeder Programmiersprache erstellt werden. Das CGI-Programm selbst, welches Sie erstellen, ist ein ausführbares Programm auf dem Webserver, das nicht von einem normalen User gestartet wird, sondern vom Webserver als ein neuer Prozess.

Abbildung 27.1: Der Ablauf der CGI-Schnittstelle

Abbildung 27.1: Der Ablauf der CGI-Schnittstelle

27.2. Vorteile von CGI in C            zurück  Ein Kapitel tiefer  Ein Kapitel höher  zum Inhaltsverzeichnis

Es ist unumstritten, dass auf Grund mächtiger String-Verarbeitungsmöglichkeiten Perl die am meisten verwendete Sprache für das Schreiben von CGI-Skripten ist. Perl ist (meiner Meinung nach) einfacher zu lernen, und der Aufwand hält sich bei Perl in Grenzen. Wo Sie in C ganze Routinen schreiben müssen, kommt Perl gerade einmal mit einer bis zwei Zeilen aus. Es ist aber nicht Sinn dieses Buchs, eine Diskussion der Vor- und Nachteile diverser Programmiersprachen anzufangen.

Einige Vorteile von CGI-Anwendungen, die in C erstellt wurden, sollen aber doch erwähnt werden:

27.3. Andere Techniken der Webprogrammierung            zurück  Ein Kapitel tiefer  Ein Kapitel höher  zum Inhaltsverzeichnis

Der Hauptgrund für den ungebremsten Boom des World Wide Web liegt im Besonderen an der Plattformunabhängigkeit der Beziehung zwischen dem Server und dem Client. Es musste dabei nicht auf das Betriebssystem, die Computerhardware oder die Netzwerkkonfiguration geachtet werden, so lange Server und Client denselben Protokollstandard verwenden. Dank der einheitlichen Protokolle (HTTP, FTP …) stieg die Verfügbarkeit unterschiedlicher Webserver, Webbrowser, Programmiersprachen und Scripting-Technologien explosionsartig an.

Die Webtechnologien werden in zwei funktionelle Kategorien (serverseitig und clientseitig) und drei konzeptionelle Schichten (Darstellungsschicht, Verarbeitungsschicht, Speicherschicht) eingeteilt. Auf den folgenden Seiten wird etwas genauer darauf eingegangen.

27.4. Das dreistufige Webanwendungsdesign            zurück  Ein Kapitel tiefer  Ein Kapitel höher  zum Inhaltsverzeichnis

27.4.1 Darstellungsschicht
Die erste Stufe der Webprogrammierung ist die Darstellungsschicht. Dies stellt auch immer noch die weit verbreitetste Schicht dar. Der Webbrowser fordert mit dem HTTP-Protokoll eine Datei vom Webserver an. Der Webserver schickt dem Browser anschließend diese Datei, was meistens die Darstellung einer einfachen Webseite ist. Zur Darstellungsschicht gehört das ganze Look & Feel einer Seite, wie etwa Mausklicks, Lesevorgänge usw., eben einfach alle Interaktionen des Nutzers. Die Darstellungsschicht wird mithilfe von Webscripting-Sprachen wie z.B. HTML oder Javascript erarbeitet. Dabei handelt es sich um interpretierte Sprachen, die erst beim Zugriff der Webseite auf den Webserver analysiert werden.

Hinweis
 

Um Webseiten darzustellen, müssen die Regeln befolgt werden, die ein Webbrowser erwartet. Damit eine Webseite richtig dargestellt wird, sucht der Webbrowser nach einer bestimmten Struktur, die durch HTML geliefert wird. Die Hypertext Markup Language (HTML) ist eine Seitenbeschreibungssprache, die verwendet wird, um Webdokumente zu erzeugen, die Verknüpfungen zu anderen Webdokumenten (Hyperlinks oder einfache Links) enthalten. HTML ist keine Programmiersprache, sondern eine bestimmte Menge von Regeln, mit denen eine Webseite formatiert wird.



Hinweis
 

Als Webprogrammierer sollten Sie HTML verstehen. Egal, ob Sie Ihre Webseiten mit Skriptsprachen wie Perl, PHP oder der Programmiersprachen C/C++ schreiben, Sie werden dabei immer wieder in Berührung mit HTML kommen. Zwar besteht ein beträchtliches Maß der Arbeit eines Webprogrammierers in der gleich folgenden Verarbeitungs- und Speicherschicht, dennoch werden Sie häufiger in die Verlegenheit kommen, dynamische Dokumente in der Darstellungsschicht zurückzuliefern. Häufig kann es auch sein, dass die Darstellungsschicht ebenfalls nur aus dynamischen Dokumenten besteht. Es muss sich also nicht immer um eine statische Webseite handeln. Da aber dieses Buch solche Bedingungen nicht voraussetzen kann, wurden die Beispiele so geschrieben, dass HTML-Ausgaben in Funktionen unterteilt sind. Und zwar so, dass Ihnen im Prinzip egal sein kann, was diese Funktion ausgibt. Sie müssen den Funktionen lediglich die richtigen Argumente übergeben.

27.4.2 Verarbeitungsschicht
In der Verarbeitungsschicht finden Vorgänge wie Fehlerprüfungen, Plausibilitätsprüfung und Auswertung der Formularfelder statt. Wird z.B. eine E-Mail aus einer Webanwendung verschickt, wird in der Verarbeitungsschicht überprüft, ob die Eingaben richtig sind. Danach wird koordiniert, mit welchem E-Mail-Programm diese Mail versendet wird. In der Verarbeitungsschicht werden natürlich noch eine Menge anderer Arbeiten verrichtet. Dazu erfahren Sie ja im Laufe dieses Kapitels mehr. Die Verarbeitungsschicht wird häufig mit interpretierten Scripting-Sprachen wie Perl, PHP, ASP und Programmiersprachen wie C/C++ erledigt. Interpretierte Sprachen sind bei gewissen Verarbeitungsvorgängen recht langsam und werden daher auf der Serverseite ausgeführt. Und um nochmals auf das Beispiel mit dem E-Mail-Programm zurückzukommen: Auf Serverseite ist dabei sichergestellt, dass die E-Mail mit einem bestimmten Programm (meistens mit dem Programm sendmail) versendet wird. Auf Seite des Clients würde das wiederum voraussetzen, dass der Nutzer dieses Programm auf seinem Computer installiert hat. Das ist nicht unbedingt benutzerfreundlich.

27.4.3 Speicherschicht
Irgendwann werden Sie auch Daten speichern wollen. Es gibt viele Gründe, Daten zu speichern, seien es Statistiken, Berechnungen oder Registrierungsdaten. Und je komplexer und umfangreicher die Daten werden, die Sie zu speichern beabsichtigen, umso besser muss die Lösung sein. Für einen simplen Besucherzähler reicht eine Textdatei aus, da sich darin immer nur eine Zahl befindet. Aber sobald Sie Anwendungen wie einen Online-Shop erstellen wollen, kommen Sie um eine Datenbank nicht mehr herum. Denn müssen Sie dabei Daten ändern, löschen oder Teile der Daten extrahieren, ist dies bei einer Datenbank häufig mit wenig Code zu bewerkstelligen. Heutzutage stehen auch eine Menge Datenbanklösungen für herstellerspezifische Erweiterungen zur Verfügung. Und vor allem, viele dieser Lösungen kosten kaum Geld. Mehr dazu erfahren Sie in Kapitel 28, MySQL und die C-API.

27.5. Cientseitige Programmierung            zurück  Ein Kapitel tiefer  Ein Kapitel höher  zum Inhaltsverzeichnis

Es gibt mittlerweile zahlreiche Programmiertechniken, die dem Webprogrammierer auf der Clientseite zur Verfügung stehen. Einige von diesen sind systemabhängig und daher für die Webprogrammierung weniger nützlich. Hier folgt ein kleiner Überblick zu clientseitigen Skriptsprachen und den Vor- bzw. Nachteilen.

27.5.1 JavaScript
Javascript ist eine Untermenge von Java, die direkt im Webbrowser implementiert ist. Mit Javascript können Sie Formulare prüfen, rechnen, Fenster maßgenau öffnen und noch viel mehr. Der Nachteil von Javascript: Wenn das Script auf dem einen Browser läuft, kann es bei dem anderen dazu führen, dass nicht einmal die Webseite dargestellt wird. Und ein weiterer Nachteil: Der Surfer kann Javascript ganz abschalten. Wenn Sie dann noch die ganze Navigation auf Javascript aufbauen, war die Arbeit umsonst. Und den Surfer sehen Sie wahrscheinlich auch nie wieder. Sollten Sie also Javascript für Ihre Webseite wählen, vergessen Sie niemals, <noscript></noscript> zu verwenden. Dies bedeutet für Webbrowser, die kein Javascript verstehen, der Code wird zwischen diesen Tags ausgeführt.

Aus Javascript heraus sind noch eine Menge unterschiedlicher Variationen von Microsoft gekommen, wie Jscript und VBScript. Wobei Jscript eine Erweiterung von Javascript ist, und VBScript auf der Syntax von Visual Basic gründet. Wer vorhat, eine dieser beiden Skriptsprachen einzusetzen, schließt allerdings Surfer mit anderen Systemen aus.

27.5.2 Java-Applets
Java hat übrigens mit Javascript bis auf die Namensähnlichkeit nichts gemeinsam. Java ist eine vollständige Programmiersprache, eine Weiterentwicklung zu C++, welche von SUN entwickelt wurde. Damit können aufwändige Menüs bis hin zu interaktiven Spielen im Web erzeugt werden. Der Vorteil von Java-Applets sind die Plattformunabhängigkeit und die Sicherheit, da der Code nicht einsehbar ist.

27.6. Serverseitige Programmierung            zurück  Ein Kapitel tiefer  Ein Kapitel höher  zum Inhaltsverzeichnis

Heute gibt es zahlreiche Möglichkeiten, serverseitige Anwendungen zu programmieren. Es gibt mittlerweile unzählig viele Schnittstellen, mit denen dynamische Webseiten auf dem Webserver generiert und gesendet werden. Es existieren dabei zwei Arten von serverseitiger Webprogrammierung: Die einen stützen sich auf kompilierte Objekte, und die anderen verwenden das Modell der Skriptsprachen. Der Unterschied dieser beiden Arten ist einfach, aber trotzdem eindeutig. Skriptsprachen werden auf dem Webserver von einem Interpreter zur Laufzeit analysiert. Kompilierte Objekte liegen auf dem Webserver schon ausführbereit vor und müssen nur noch gestartet werden. Somit laufen Skriptsprachen in der Regel etwas langsamer als kompilierter Code ab.

Das Ziel der serverseitigen Programmierung bleibt allerdings immer dasselbe - dynamisch erzeugter HTML-Code soll in Form einer Webseite in Ihrem Browser ausgegeben werden.

Nun soll auf die CGI-Schnittstelle eingegangen werden. CGI wird häufig als eine Programmiersprache bezeichnet, was es aber nicht ist. CGI ist ein standardisiertes Gateway, das eine Schnittstelle zwischen einem Webserver und dem serverseitigen Code darstellt. Dass CGI immer noch so populär ist, verdankt diese Schnittstelle seiner Vielsprachigkeit. Sie können praktisch mit jeder Programmiersprache, die etwas ausgeben kann, CGI-Skripte schreiben. Einziger Nachteil von CGI ist der Verarbeitungsaufwand eines Skripts, da jede CGI-Anfrage einen separaten Prozess in einem separaten Speicherbereich auf dem Webserver benötigt.

Diesen Nachteil haben die Entwickler von Webservern allerdings nicht auf sich beruhen lassen und fleißig an einer Lösung des Problems gearbeitet. Die Entwickler brachten eine webserverspezifische API (Application Programming Interface) heraus. Diese APIs waren voll im Webserver integriert und liefen auch in der Regel schneller ab als einfache Skripte. Der Nachteil solcher APIs ist aber, dass diese mit einem Webserver verschweißt sind. Sie machen also nur für Webserver Sinn, die auf mehreren Systemen erhältlich sind (z.B. Apache).

Zu solchen Standalone-Skriptsprachen zählen etwa ASP (Active Server Pages), JSP (Java Server Pages), CFML (Cold Fusion Markup Language) und letztendlich die immer populärere (oder schon populärste) Skriptsprache PHP. Aber auch für Perl gibt es Standalone-CGI-Anwendungen wie z.B. mod_perl oder FastCGI.

27.7. Der Webserver            zurück  Ein Kapitel höher  zum Inhaltsverzeichnis

27.7.1 Das Client/Server-Modell des Internets
Das Internet oder genauer das World Wide Web wurde nach dem Client/Server-Prinzip entwickelt. Der Webbrowser ist in dieser Architektur der Client. Geben Sie z.B. in den Webbrowser die Adresse http://www.pronix.de/ ein, ruft der Browser Dienste im Web ab. In diesem Fall wird eine HTTP-Anforderung über das Netzwerk verschickt. Mit dem HTTP-Protokoll haben Sie jetzt Zugriff auf Dateien von Servern in Netzwerken. Der Server oder genauer der Webserver verarbeitet nun die Anfrage des Clients. Wobei der Standort des Webservers egal ist. Dieser kann sich im selben Gebäude, auf der anderen Seite der Erde oder auch auf demselben Computer befinden. Meistens besteht die Aufgabe des Webservers im Internet darin, ein angefordertes Dokument an den Client zurückzuschicken, beispielsweise HTML-Daten zur Darstellung einer Webseite. Der Webserver wird häufig auch als HTTP-Dämon (Hypertext Transfer Protocol Daemon) bezeichnet. Hier der Vorgang einer solchen Transaktion bildlich:

Abbildung 27.2: Transaktion einer HTTP-Anfrage

Abbildung 27.2: Transaktion einer HTTP-Anfrage

Hinweis
 

Ein Webserver ist nichts anderes als ein Programm bzw. eine Anwendung (meist in C geschrieben) ohne visuelle Oberfläche auf dem Server. Das Programm können Sie nicht sehen. Es nimmt über Ports (meistens Port 80) einen Auftrag entgegen und führt diesen aus, zumeist das Anzeigen einer HTML-Seite. Häufig wird irrtümlicherweise der Server als Hardware mit dem Serverprogramm darauf gleichgesetzt, wobei die Beziehung hier so eng ist, dass dies auch wieder nicht ganz verkehrt ist.

27.7.2 Serverimplementierung
Bevor Sie sich, sei es privat oder für eine Organisation, für eine Webpräsenz entscheiden, müssen Sie zunächst überlegen, wie oder mit wem Sie ins Web gehen. Entscheidend für die Organisationsstrategie werden wohl die Kosten und der Zweck Ihrer Präsenz sein.

In der Regel werden Sie sich für eine der zwei gebräuchlichsten Strategien zur Webserverimplementierung entscheiden:

27.7.3 Hosting-Services
Auf die meisten Anwender dürfte diese Lösung zutreffen. Dabei geht der Kunde im Zusammenhang mit einem Web Service Provider (kurz WSP) ins Netz. Verwechseln Sie aber den WSP nicht mit dem Internet Service Provider (kurz ISP). Mit dem ISP wählen Sie sich ins Internet ein, mit einem WSP richten Sie Ihre Internetpräsenz ein. Wobei heute viele ISPs auch schon Hosting-Service anbieten. Sie bekommen z.B. bei großen ISPs wie AOL oder T-Online auch schon 10 MB Platz für eine Internetpräsenz. Dabei müssen Sie aber auf Extras und eine eigene Domain wie www.mein_wunschname.de verzichten.

Unter den vielen Hosting-Services, die es mittlerweile im Netz gibt, ist es schon schwer, einen Überblick zu bekommen. Da Sie wahrscheinlich die Beispiele im Buch erst einmal am lokalen Rechner testen, müssen Sie sich jetzt noch keine Gedanken darüber machen, wo Sie Ihre Webseite hosten. Aber Sie sollten, falls Sie eigene Skripte auf dem Webserver hochladen wollen, darauf achten, dass in Ihrem Paket Dinge dabei sind wie: eigene CGIs ausführen, PHP ausführen, Zugriff auf eine MySQL-Datenbank haben. Solche Hosting-Services kosten so in etwa 10 bis 20 Euro monatlich. Geben Sie einfach in einer Suchmaschine den Begriff "Hosting-Service" ein und Sie bekommen unzählige Ergebnisse zurück.

Die Vorteile solcher Hosting-Services sind ganz klar der günstige Preis, dass Sie keinerlei Verwaltungsaufgaben und Aufwand haben und somit über keinerlei technische Erfahrung mit Webservern verfügen müssen. Ebenso ist ein enormer Vorteil, dass die meisten Hosting-Services eine Bereitschaft rund um die Uhr, sieben Tage in der Woche bieten.

27.7.4 Schlüsselfertige Lösung
Bei einer schlüsselfertigen Lösung handelt es sich um eine vollständige in sich geschlossene Soft- und Hardwarelösung. Der Vorteil gegenüber dem Hosting-Service liegt darin, dass Sie bei einem technischen Problem nicht vom WSP abhängig sind. Haben Sie ein Problem, müssen Sie erst beim WSP nachfragen. Es wird dabei praktisch nur noch ein Server am Netzwerk und am Stromnetz angeschlossen, und Sie sind im Web. Dabei ist aber schon ein gewisses Maß an Know-how notwendig. Solche Server-Applikationen sind vorwiegend für kleinere bis mittlere Organisationen gedacht. Die Konfiguration des Webservers wird meistens über den Client, den Webbrowser, vorgenommen, der mit einer einfach zu bedienenden Oberfläche ausgestattet ist. Oft wird bei der Software Linux als Betriebssystem und Apache als Webserver verwendet, da bei beiden kaum lizenzrechtliche Bestimmungen beachtet werden müssen.

27.7.5 Weitere Möglichkeiten
Theoretisch haben Sie aber auch die Möglichkeit, einen Server von zu Hause aus zu betreiben. Dabei installieren Sie einen Webserver auf Ihrem PC. Danach wählen Sie sich ins Internet ein und bekommen meist eine dynamische IP-Adresse. Unter dieser IP-Adresse können jetzt die Surfer Ihre Webseite ansteuern und das Internetangebot auch nutzen. Der Vorteil: Diese Lösung kostet keinen Cent. Aber bei einer ständig wechselnden IP-Adresse Ihrer Webseite dürfte wohl kaum ein Websurfer Ihre Seite finden. Dies können Sie theoretisch mit kostenlosen Diensten wie www.dyndns.org beheben. Damit können Sie sich auch ohne DENIC eine Webadresse einrichten lassen. Wobei logischerweise die Bandbreite der Besucher, die sich gleichzeitig auf Ihrer Seite tummeln können, beschränkt ist. Aber probieren macht gewöhnlich Spaß, und so lernen Sie auch noch einiges dabei.

Eine weitere Möglichkeit stellt das Intranet dar, ob nun privat oder geschäftlich. Wenn Sie das Glück haben, in einer Firma ein größeres Intranet zu betreiben, können Sie schalten und walten, wie Sie wollen.

Hinweis
 

Wenn Sie die folgenden Beispiele lokal auf Ihrem System testen wollen, wird ein (Web-) Server benötigt. Die folgenden Beispiele wurden mit dem Apache als Serversoftware getestet.

DENIC
 

Die DENIC ist in Deutschland für das Vergeben von *.de-Domänen zuständig. Wenn Sie also eine eigene Domäne registrieren lassen möchten, so muss dies bei der DENIC geschehen. Die meisten WSPs kümmern sich in der Regel für den Kunden darum.

27.7.6 Apache
1995 schlossen sich mehrere Entwickler zusammen, um den damals dominierenden, aber sehr fehlerhaften Webserver NCSA weiterzuentwickeln. Was dabei herauskam, wurde wegen der vielen Fehlerbehebungen "a patchy Server" (Patches) oder einfach Apache genannt.

Warum Apache?
Warum in diesem Kapitel der Apache-Webserver verwendet wird, lässt sich recht einfach erklären. Der Apache ist für viele Systeme erhältlich, und ist für ein System einmal keine Binary-Version vorhanden, können Sie den Quellcode, der in C geschrieben wurde und frei vorliegt, auf dem System anpassen und übersetzen (kompilieren) lassen. Natürlich können Sie sich auch auf gängigen Systemen Ihre eigene Version des Apaches zusammenbasteln. Der zweite Grund: Apache liegt in freier Form vor. In freier Form heißt, der Quellcode liegt offen, somit werden Sicherheitslücken schneller gefunden als bei Webservern, bei denen Sie sich auf den Hersteller verlassen müssen. Und der dritte Grund ist auch der ausschlaggebende: Der Apache ist der am meisten verwendete Webserver im Internet, wie folgende Auswertung von der Webseite http://www.netcraft.com/survey zeigt:

Abbildung 27.4: Verwendete Webserver im Internet

Abbildung 27.4: Verwendete Webserver im Internet

And last, but not least: Apache ist kostenlos. Der Webserver finanziert sich durch die Apache Software Foundation, wo große Firmen wie IBM gewisse Beträge spenden und so die Weiterentwicklung des Webservers unterstützen. Firmen und Entwickler, die dieses Projekt unterstützen wollen, sind immer erwünscht. Mehr dazu unter http://www.apache.org.

Apache installieren und testen
Damit Sie in den folgenden Abschnitten die Beispiele auf Ihrem lokalen Rechner testen können, müssen Sie zunächst Apache auf dem System installieren, sofern dies noch nicht geschehen ist. Es empfiehlt sich im Allgemeinen, die CGI-Anwendungen zuerst auf einem lokalen Rechner zu testen, ehe sie im Web der Öffentlichkeit vorgestellt werden.

Der Vorgang der Installation wird anhand der Binary-Version des Apache vorgenommen, da dies wohl die meist verwendetste Installationsart der Leser ist. Für eine Beschreibung, wie Sie mit dem Sourcecode einen persönlichen Apache erstellen können, sei die Homepage http://www.apache.org empfohlen.

Windows
In der Regel kann der Apache auf jeder Windows-Version ohne Probleme betrieben werden. In der folgenden Tabelle finden Sie einige Versionen, mit denen es Probleme geben könnte, und Hinweise, wie Sie Abhilfe schaffen.
Version Problemlösung
Windows95 Winsock2-Umgebung installieren
Windows NT 4.0 Update auf Servicepack SP6a
Windows 2000 Update auf Servicepack 2

Tabelle 27.1: Abhilfe bei Problemen mit Apache unter Windows

Sie können sich jetzt die aktuellste Version des Apache von der Apache-Webseite herunterladen. Um den Apache zu installieren, benötigen die Windows-Versionen Windows 95, Windows 98, Windows 98SE und Windows NT 4.0 mit Microsoft Installer, Version 1.10, den Sie auf der Webseite http://www.microsoft.com herunterladen können. Bei Windows ME, Windows 2000 und Windows XP ist dieser Installer bereits vorhanden.

Doppelklicken Sie jetzt apache_2.x.xx-win32-x86-no_ssl.msi und folgen den typischen Anweisungen der Installation (wobei x.xx für eine Versionsnummer steht). Bei allen Fenstern bis auf das folgende können Sie einfach weiterklicken:

Abbildung 27.4: Eingabe von Serverinformationen

Abbildung 27.4: Eingabe von Serverinformationen

Verwenden Sie dieselben Einstellungen wie in der Abbildung. Für den Netzwerk-Domainnamen und den Servernamen geben Sie localhost ein. Die E-Mail-Adresse bleibt Ihnen überlassen.

Wenn die Installation beendet ist, öffnen Sie den Webbrowser, mit dem Sie auch im Internet unterwegs sind, und geben als Adresse http://localhost ein, dann drücken Sie ENTER. Wenn alles glatt verlief, sollte folgende Seite erscheinen:

Abbildung 27.5: Erfolgreiche Installation des Apache-Webservers

Abbildung 27.5: Erfolgreiche Installation des Apache-Webservers

Sollten Sie keinen Apache im Webbrowser sehen, vergewissern Sie sich, ob der Apache überhaupt gestartet wurde (siehe "Apache starten und stoppen").

Bei den Windows Versionen, die eine "echte" Benutzerverwaltung haben (z.B. NT, 2k etc.) empfiehlt es sich, einen extra Benutzer einzurichten, unter dessen Namen der Apache als Dienst läuft.

Linux
Die Installation unter Linux gestaltet sich recht einfach, da der Apache-Webserver in der Regel mit der Distribution mitgeliefert wird. Das heißt, Sie müssen nur noch das Paket von Ihrer Linux-Distribution nachinstallieren.

Abbildung 27.6: Paketeauswahl bei der SuSE-Distribution mit YAST2

Abbildung 27.6: Paketeauswahl bei der SuSE-Distribution mit YAST2

Natürlich können Sie sich auch die neueste Version des Apache herunterladen und installieren, was allerdings für den Verlauf dieses Buchs nicht nötig ist. Die Beispiele wurden u.a. auch mit dem Apache der Version 1.3 getestet. Als Nächstes müssen Sie den Webserver in einer Konsole mit folgendem Befehl starten:

/apache2/bin/apachectl start  

Sollte dies nicht funktionieren, müssen Sie einmal kurz den Superuser (su) geben, um Apache zu starten. Dann sollte es mit folgendem Aufruf klappen:

apachectl start  

Starten Sie jetzt den Webbrowser Ihrer Wahl und geben Sie die URL http://localhost ein und drücken ENTER. Danach sollten Sie vom Apache-Webserver begrüßt werden, wie in der folgenden Abbildung unter SuSE-Linux mit dem Browser Mozilla dargestellt:

Abbildung 27.7: Der Apache-Webserver läuft

Abbildung 27.7: Der Apache-Webserver läuft

Bei einem UNIX/Linux-System möchte man sich auch gern einmal die Funktion der Change-root-Umgebung ansehen. In diesem Fall bekommt der Apache eine eigene Umgebung, was den Betrieb sicherer gestaltet.

htdocs-Verzeichnis
Die Begrüßungsseite in den verschiedensten Sprachen finden Sie im htdocs-Verzeichnis. Dieses finden Sie unter MS-Windows z.B. in C:\Programme\Apache Group\Apache2\, bei SuSE 8.2 in /srv/www/ und bei Red Hat sollte sich dieses Verzeichnis im Pfad /etc/apache/ oder /etc/httpd/ befinden.

Wenn Sie jetzt eine HTML-Seite auf dem lokalen Webserver speichern und mit einem Webbrowser betrachten wollen, müssen Sie dazu nur die Webseiten, Bilder und, falls benötigt, weitere Unterordner im htdocs-Verzeichnis des Apache-Servers ablegen.

Erstellen Sie z.B. eine HTML-Seite mit dem Namen "testseite.html" und speichern diese im htdocs-Verzeichnis, dann können Sie diese Seite mit einem Browser über die URL "http://localhost/testseite.html" aufrufen.

Apache starten und stoppen
Bei Windows befindet sich in der Statuszeile rechts unten eine Feder. Klicken Sie diese an, und es öffnet sich folgendes Fenster:

Abbildung 27.6: Der Apache Service Monitor unter Windows

Abbildung 27.6: Der Apache Service Monitor unter Windows

Damit können Sie Apache starten, stoppen und wieder neu starten. Sollten Sie nicht wollen, dass Apache bei jedem Systemstart automatisch gestartet wird, können Sie unter Systemsteuerung · Dienste oder unter Systemsteuerung · Verwaltung · Dienste die Konfiguration von automatisch auf manuell umändern. Damit können Sie Apache in Zukunft von Hand starten.

Unter Linux können Sie das Shell-Skript apachectl verwenden. Mit welchem Parameter dabei Apache gesteuert wird, können Sie der folgenden Tabelle entnehmen.

Befehl Bedeutung
apachectl start Startet den Apache
apachectl stop Stoppt den Apache
apachectl restart Neustart des Apache mit der HUP-Methode
apachectl graceful Neustart des Apache mit der USR1-Methode

Tabelle 27.2: Steuern des Apache mit dem Shellskript apachectl (Linux)

In den meisten Fällen wird Apache bereits beim Boot-Vorgang automatisch gestartet. Leider gibt es mittlerweile so viele Linux-Distributionen und auch Apache-Versionen, dass es kaum möglich ist, Ihnen eine pauschale Anleitung zum Starten und Stoppen des Apache-Webservers zu vermitteln. Dafür sei die Dokumentation für die entsprechende Apache-Version auf der Webseite http://httpd.apache.org/docs-project/ empfohlen. Das Steuerskript apachectl ist die empfohlene Methode, um den Apache zu steuern. Weitere Möglichkeiten zum Starten von Apache sind:

Distribution Befehl zum Starten
SuSE Linux /sbin/init.d/apache start
Red Hat Linux /etc/rc.d/httpd start

Tabelle 27.3: Weitere Möglichkeiten den Apache zu starten (Linux)

Apache für CGI-Anwendungen konfigurieren
Um den Apache zu konfigurieren, muss die Datei httpd.conf mit einem Texteditor geöffnet werden. Unter Windows sollte sich diese Datei im Verzeichnis C:\Programme\Apache Group\Apache2\conf befinden. Bei SuSE Linux 8.2 befindet sich diese Datei in /etc/httpd und bei Red Hat Linux im Verzeichnis /etc/httpd/conf. Beachten Sie außerdem, dass Sie eventuell Root-Rechte auf diese Datei benötigen, wenn Sie diese ändern wollen. Sollten Sie vorhaben, die CGI-Anwendungen im vorgegebenen cgi-bin-Verzeichnis auszuführen, müssen Sie in der Regel nichts an der Datei httpd.conf ändern. Dann können Sie munter die erste CGI-Anwendung in Ihrem Webbrowser starten, welche gleich erstellt werden soll. Hier der Quellcode dazu:

#include <stdio.h>
#include <time.h>

/* Die Kopfzeile eines Standard-HTML-Dokuments
 * Titel: String, der als Titel erscheinen soll
 */
void print_html_header(char *titel)
{
   printf("<html><head>\n");
   printf("<title>%s</title>\n",titel);
   printf("</head><body>\n");
}

/* Das Ende eines HTML-Dokuments */
void print_html_end()
{
   printf("</body></html>\n");
}

/* Damit überhaupt ein HTML-Dokument ausgegeben wird */
void print_header()
{
   printf("Content-Type: text/html\n\n");
}

void print_time()
{
   time_t zeit;
   time(&zeit);
   printf("Aktuelle Systemzeit: ");
   printf("%s\n",ctime(&zeit));
}

int main()
{
   print_header();
   print_html_header("Hallo Welt in CGI mit Zeit\n");
   print_time();
   print_html_end();
   return 0;
}

Die Funktion print_html_header() enthält die Kopfdaten eines HTML-Dokuments. Der String, den Sie der Funktion übergeben, wird als Titel der HTML-Seite verwendet. Und die Funktion print_html_end() enthält das Ende eines HTML-Dokuments. Zur Zeile print_header() erfahren Sie später mehr. Mit der Funktion print_time() wird die aktuelle Systemzeit ausgegeben. Da sich diese zwischen den Funktionen print_html_header() und print_html_end() befindet, also im Body-Teil des HTML-Dokuments, stellt die Ausgabe praktisch den Inhalt der HTML-Seite dar. Jetzt soll dieses CGI-Programm mit dem Webbrowser Ihrer Wahl aufgerufen werden.

Ein CGI-Programm erstellen und starten Sie in den folgenden Schritten (der Programmname sei time.c):

Wenn alles richtig verlaufen ist, müssten Sie folgende Ausgabe auf Ihrem Bildschirm erhalten:

Abbildung 27.7: Ausgabe der Systemzeit mit Internet Explorer (Windows)

Abbildung 27.7: Ausgabe der Systemzeit mit Internet Explorer (Windows)

Abbildung 27.8: Ausgabe der Systemzeit mit Mozilla (SuSE Linux)

Abbildung 27.8: Ausgabe der Systemzeit mit Mozilla (SuSE Linux)

Tipp
 

Unter Linux können Sie sich das Verändern der Extension ersparen, wenn Sie der ausführbaren Datei gleich beim Übersetzen diese Extension übergeben: gcc -o time.cgi time.c.

Troubleshooting
Sollten Sie die CGI-Anwendung nicht zum Laufen bekommen, folgt eine kurze Checkliste, welche möglichen Ursachen dies haben könnte:

Bevor Sie jetzt weitere CGI-Anwendungen erstellen, benötigen Sie noch ein wenig Grundwissen zum HTTP-Protokoll.

Weiter mit: 27.8. Das HTTP-Protokoll          zum Inhaltsverzeichnis