CGI

Post Reply
Message
Author
rübezahl

CGI

#1 Post by rübezahl »

Hi! Mir ist das Prinzip von CGI nicht klar.

Ich habe die Kapitel über CGI / CGI.pm immer und immer wider gelesen
(bei O'Reilly) und ich verstehe es einfach nicht. Ich habe ein kleines
Test-Skript geschrieben und wollte es testen. Aber wie zu Hölle? Mit
Netscape, Perl, Apache, Shell gehts nicht. Ist ja auch klar: Netscape kann kein Perl. Perl ist kein Browser - auch klar. Apache ist kein Interpreter - auch klar. Die Shell kann kein Perl - auch klar. Aber welchen Programm soll ich den nun mein CGI-Skript, zur ausführung in die Hand drücken?
rübezahl

Jochen

Re: CGI

#2 Post by Jochen »

- Browser fragt Webserver
- Webserver erkennt anhand der URL, dass er die Daten einem Skript übergeben soll, und ruft das Skript auf.
- Die erste Zeile im Skript (#!/usr/bin/perl) verrät dem System, dass zur Ausführung der perl-Interpreter benötigt wird.
- perl arbeitet das Skript ab und gibt HTML-Code an den Webserver aus.
- Der liefert den HTML-Code an den Browser.
- Und der stellt ihn dann dar.

Zum 2. Punkt: In der httpd.conf muss ein Verzeichnis als CGI-Verzeichnis angegeben werden. Alles darin wird als Skript angesehen, so dass alle URLs, die auf das Verzeichnis zugreifen, automatisch den Webserver dazu veranlassen das entsprechende Skript zu starten.

OK?

rübezahl

Re: CGI

#3 Post by rübezahl »

also muss ich erst mal ein verzeichnis anlegen, in den ich alle meine CGI-skripts ablege. dann muss ich apache sagen: das wehr auch immer, auf dateinein welcher art auch immer, in diesem Verzeichnis zugreift, auf CGI-skripts zu prüfen ist und g.g.f. auszufüren. wenn ich dann netscape starte und irgend eine datei, aus diesem Verzeichnis aufrufe, schaltet sich apache ein und sucht nach perl-skripts. wenn es welche gibt, werden sie an den interpreter übergebeb. der über gibt das resultat, seiner arbeit an apache zurück. und dieser an den browser.
wenn das so ist, wie ich es jetz verstanden habe,ist das verdammt beschißen im buch erklärt!
rübezahl

Jochen

Re: CGI

#4 Post by Jochen »

Kleines Missverständnis liegt (glaube ich) noch vor: Der Browser greift nicht *direkt* auf die Datei zu. Er nimmt nur Kontakt zum Webserver auf und stellt dessen Daten dar. Ist ja auch klar, im Web sind Client und Server unterschiedliche Rechner. Während der lokalen Entwicklung kann natürlich ein und der selbe Rechner sowohl Client (Browser) als auch Server sein, aber man muss dann den gleichen Weg gehen: Nicht über eine file://-URL, sondern beispielsweise über http://localhost/cgi-dir/skript. Nur so kommt der Webserver auch tatsächlich ins Spiel.

Der wiederum weiss, dass Dateien unter cgi-dir Skripte sind, die HTML-Code auswerfen (anstelle statischer HTML-Dateien). Die ruft er auf, fängt deren Ausgabe ab und liefert sie an den Browser.

Der Server muss dazu auch nicht wissen, ob das Perl-Skripte sind. Auch C-Programme, Shell-Skripte, Python-Skripte,... sind ohne weiteres möglich. Letzten Endes läuft es im Server alles auf einen Aufruf aus der exec-Familie hinaus.

Und hier kommt dann das System ins Spiel. Entweder das zu startende Programm ist ein Binary, dann läuft der ELF-Loader an, oder es ist ein Skript, und wie oben beschrieben wird dann der zugehörige Interpreter gestartet und dem das Skript als Argument mitgegeben.

OK?

rübezahl

Re: CGI

#5 Post by rübezahl »

hi,jochen!
langsam reime ich mir jatz alles zusammen. das mit dem dateipfat :"http.//lokalhorst/..." stand nähmlich nirgens. in den büchern gehen sie davon aus, das man eine zweite server-maschine hat. hab' mir heute noch das kleine o'reilly "cgi-kurtz&gut" gekauft. da wurde mir auch noch einiges klahrer. irgendwie hab ich mir das alles nicht so kompliziert vorgestellt. "schnief" <img src="http://www.pl-forum.de/UltraBoard/Images/Sad.gif" border="0" align="middle">
rübezahl

Jochen

Re: CGI

#6 Post by Jochen »

Ach nö, kompliziert ist das nicht. Die Aufgabenteilung ist schliesslich schön strikt. Und wenn einmal der Apache eingerichtet ist, fehlen eigentlich nur noch die Perl-Skripte... <img src="http://www.pl-forum.de/UltraBoard/Images/Happy.gif" border="0" align="middle">

rübezahl

Re: CGI

#7 Post by rübezahl »

Hi, jochen!
Ich brüte immer noch über diesen beschissene Bücher, und werde nicht schlau daraus, was ich nun in die access.conf schreiben soll. Angenommen ich will das Verzeichnis /cgi-bin für alle freigeben, was muß ich dann für eine Zeile eintragen? und wo wir schohn dabei sind: In die Datei srm.conf soll ich laut O'Reilly, "AddType text/html .shtml" und "AddHandler server-parsed .shtml" schreiben. Nur die Datei "srm.conf" gibt es garnicht. "apache-mime.types" und "httpd.conf" und "http-perl.conf" habe ich, aber ansonsten...
Fieleicht kannst du mir auch ein brauchbares Buch nennen, zu dem Thema.
Gruß Rübezahl

SRTwist

Re: CGI

#8 Post by SRTwist »

hi du solltest dir mahl das buch von larsalbrecht APACHE WEB-SERVER vom Thomson Publishing verlag reinziehen das ist recht ausführlich ! aber was ich nicht ganz verstehe? Wieso machst du das alles die SuSE richtet doch den apachen lauffähig ein ! du brauchst eigendlich den apachen nur mit yast nachzuinst. und dat ding funst so habe ich das gemacht,
nagut habe ihn auch nochmahl zerlegt aber nur interesse halber achja und einrichten kann man den apachen gut mit dem webmin den du unter www.webmin.de findest!
cu
SRTwist

ratte

Re: CGI

#9 Post by ratte »

um das mal in einem abwasch zu erledigen:

in der httpd.conf von Apache, die wahrscheinlich in /var/lib/apache/conf oder /usr/local/apache/conf liegt, ist folgender Eintrag fuer CGI-proggies zu machen:

Alias /my-cgi-directory/ "/my/path/to/the/executable/"
<Directory "/my/path/to/the/executable/">
Options Indexes ExecCGI
AllowOverride None
Order allow,deny
Allow from all
</Directory>

Das ist eine von mehreren Moeglichkeiten, die es erlaubt, *ausserhalb* vom cgi-bin Verzeichnis des Apache zu arbeiten.

natuerlich muss das executable mit 'chmod +x' ausfuehrbar gemacht worden sein.

Apache neu gestartet und 'http:<local-ip>/my-cgi-directory/' im Browser eingeben und mit 'tail -f /var/log/error.log' (o.ae.) beobachten.

Wer das so nicht mag, es lassen sich analog zu 'Alias' auch 'ScriptAlias'e anlegen...

cu
ratte

Post Reply