Linux CGI Beispiel

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Linux CGI Beispiel

Beitrag von DarkDragon »

Guten Abend,

Ich habe hier ein kleines Beispiel unter coLinux geschrieben:

Code: Alles auswählen

printn("CONTENT-TYPE: text/html"+chr(10)+chr(10))
printn("<!DOCTYPE HTML PUBLIC "+chr(34)+"-//W3C//DTD HTML 4.0//EN"+chr(34)+" "+chr(34)+"http://www.w3.org/TR/REC-html40/strict.dtd"+chr(34)+">"+chr(10))
printn("<html lang="+chr(34)+"en"+chr(34)+" dir="+chr(34)+"LTR"+chr(34)+">"+chr(10))
printn("<body>"+chr(10))
printn("Your IP: "+PeekS(getenv_("REMOTE_ADDR"))+chr(10))
printn("</body>"+chr(10))
printn("</html>"+chr(10)+chr(10))
PrintN() gibt immer etwas aus. Zuerst muss jedoch immer der Inhalts-typ festgelegt werden. Dies geschieht durch printn("CONTENT-TYPE: text/html"+chr(10)+chr(10)). Zu beachten sind auch die beiden Chr(10)+Chr(10), die immer an dieser Zeile vorhanden sein müssen. Bei printn("Your IP: "+PeekS(getenv_("REMOTE_ADDR"))) habe ich noch ein weiteres Feature eingefügt. Durch getenv_ kann man eine Umgebungsvariable auslesen. In diesem fall REMOTE_ADDR(Die Internet IP-Adresse des Users).

Hier kann man das Packet herunterladen:
http://www.bradan.net/downloads/cgi_example.zip

Die EXE bitte nicht unter Windows starten, es ist eine Linux Anwendung.

Hier noch der Output:
http://www.bradan.net/cgi-bin/test

Und hier noch eine Liste der Umgebungsvariablen mit'n paar Beispielwerten:

HTTP_USER_AGENT="Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.7.3) Gecko/20041020"
SERVER_PORT=80
HTTP_HOST=localhost
DOCUMENT_ROOT="/var/www/html"
HTTP_ACCEPT_CHARSET="iso-8859-1,*,utf-8"
SCRIPT_FILENAME="/var/www/cgi-bin/env.sh"
REQUEST_URI="/cgi-bin/env.sh"
SCRIPT_NAME="/cgi-bin/program.cgi"
HTTP_REFERRER="http://localhost/web-page.html"
HTTP_CONNECTION=Keep-Alive""
REMOTE_PORT=32984
PATH="/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin"
PWD="/var/www/cgi-bin"
SERVER_ADMIN="root@localhost"
HTTP_ACCEPT_LANGUAGE=en
HTTP_ACCEPT='text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5'
REMOTE_ADDR='127.0.0.1'
SHLVL=1
SERVER_NAME=localhost
SERVER_SOFTWARE='Apache/2.0.52 (Fedora)'
QUERY_STRING=
SERVER_ADDR='127.0.0.1'
GATEWAY_INTERFACE='CGI/1.1'
SERVER_PROTOCOL='HTTP/1.1'
HTTP_ACCEPT_ENCODING=gzip
REQUEST_METHOD=POST
CONTENT_LENGTH=47
CONTENT_TYPE='application/x-www-form-urlencoded'
POST_DATA='formval1=VALUE1&formval2=VALUE2&formval3=VALUE3'
Zuletzt geändert von DarkDragon am 12.05.2005 18:52, insgesamt 3-mal geändert.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
benny
Beiträge: 383
Registriert: 29.08.2004 09:18
Wohnort: Am Ende des www's
Kontaktdaten:

Beitrag von benny »

@DDragon:

Absolut keine Ahnung ... aber sofern Du mit Deinem Account überhaupt
eigene CGI's benutzen darfst, würde ich den all-inkl-Support mal fragen.

Ich habe von denen immer sehr schnell und sehr gute Hilfe bekommen :!:
So long,
benny!
.
nur t0te f1sche schw1mmen m1t dem str0m - 00100 !
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

benny hat geschrieben:@DDragon:

Absolut keine Ahnung ... aber sofern Du mit Deinem Account überhaupt
eigene CGI's benutzen darfst, würde ich den all-inkl-Support mal fragen.

Ich habe von denen immer sehr schnell und sehr gute Hilfe bekommen :!:
Darf ich ja, sonst hätt ich damit ja nie angefangen ^^.

http://all-inkl.com/index.php?content=a ... r=&domain=
CGI / Perl 5.xx eigene CGI's möglich Ja Ja Ja
[EDIT]
OK, alles funzt prima nun! ;)
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
bluejoke
Beiträge: 1244
Registriert: 08.09.2004 16:33
Kontaktdaten:

Beitrag von bluejoke »

Hallo!

Könnt ihr mir das bitte nochmal langsam erklären: Wie krieg ich CGI-Teil aus meinem PB-Sourcecode?

Danke,
Simon
Ich bin Ausländer - fast überall
Windows XP Pro SP2 - PB 4.00
Benutzeravatar
125
Beiträge: 1322
Registriert: 19.09.2004 16:52
Wohnort: Neu Wulmstorf (Hamburg)
Kontaktdaten:

Beitrag von 125 »

Hi :)
Hab mir das gerade mal angeguckt, aber wie kann ich werte die ein Formular gepostet hat bekommen oder Werte getten die so übergeben wurden CGI?Variable=xxx ?

Schonmal Danke in voraus :)


//Edit: bei mir gibt das immer nen ServerFehler :(
Serverfehler!

Die Anfrage kann nicht beantwortet werden, da im Server ein interner Fehler aufgetreten ist.

Fehlermeldung:
Premature end of script headers: test

Sofern Sie dies für eine Fehlfunktion des Servers halten, informieren Sie bitte den Webmaster hierüber.
Error 500

mfg
125
Zuletzt geändert von 125 am 17.05.2005 13:36, insgesamt 1-mal geändert.
Benutzeravatar
freedimension
Admin
Beiträge: 1987
Registriert: 08.09.2004 13:19
Wohnort: Ludwigsburg
Kontaktdaten:

Beitrag von freedimension »

125 hat geschrieben:Hi :)
Hab mir das gerade mal angeguckt, aber wie kann ich werte die ein Formular gepostet hat bekommen oder Werte getten die so übergeben wurden CGI?Variable=xxx ?
IMHO müsste das analog zum obigen Beispiel eigentlich auch über getenv_("Variable") funktionieren.
Beginne jeden Tag als ob es Absicht wäre!
Bild
BILDblog
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Beitrag von Danilo »

freedimension hat geschrieben:IMHO müsste das analog zum obigen Beispiel eigentlich auch über getenv_("Variable") funktionieren.
ProgramParameter() sollte man auch mal probieren. Ich habe
da was im Hinterkopf das da auch was ankommt... kann es aber
nicht sicher sagen.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
125
Beiträge: 1322
Registriert: 19.09.2004 16:52
Wohnort: Neu Wulmstorf (Hamburg)
Kontaktdaten:

Beitrag von 125 »

THX, werd ich mal probieren.
Aber aus irgendeinem Grund funktioniert das Beispiel (kompiliert, oder selbst kompiliert) nicht bringt mir immer nen 500er aufm Server :(.

Woran kann das liegen? (Wer mal guckn will : http://125.gpfclan.de/cgi-bin/cgi.exe )

mfg
125
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

125 hat geschrieben:Hi :)
Hab mir das gerade mal angeguckt, aber wie kann ich werte die ein Formular gepostet hat bekommen oder Werte getten die so übergeben wurden CGI?Variable=xxx ?

Schonmal Danke in voraus :)


//Edit: bei mir gibt das immer nen ServerFehler :(
Serverfehler!

Die Anfrage kann nicht beantwortet werden, da im Server ein interner Fehler aufgetreten ist.

Fehlermeldung:
Premature end of script headers: test

Sofern Sie dies für eine Fehlfunktion des Servers halten, informieren Sie bitte den Webmaster hierüber.
Error 500

mfg
125
Also, Variablen etc. werden bei GET über die Umgebungsvariable QUERY_STRING übergeben. Diese kannst du durch getenv_() auslesen.
bluejoke hat geschrieben:Hallo!

Könnt ihr mir das bitte nochmal langsam erklären: Wie krieg ich CGI-Teil aus meinem PB-Sourcecode?

Danke,
Simon
Das CGI-Teil ist die Anwendung(du erstellst einfach eine Executable). Diese muss allerdings auf dem Betriebssystem deines Hosters geschrieben werden. Dann ladest du sie einfach in deinen cgi-bin und alles ist in ordnung.

[EDIT]
125 hat geschrieben:THX, werd ich mal probieren.
Aber aus irgendeinem Grund funktioniert das Beispiel (kompiliert, oder selbst kompiliert) nicht bringt mir immer nen 500er aufm Server :(.

Woran kann das liegen? (Wer mal guckn will : http://125.gpfclan.de/cgi-bin/cgi.exe )

mfg
125
Welchen CHMOD hat dein CGI-BIN? Und hat dein Server überhaupt CGI-Funktionalität? Und ist es ein Windows oder ein Linux Server?
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
125
Beiträge: 1322
Registriert: 19.09.2004 16:52
Wohnort: Neu Wulmstorf (Hamburg)
Kontaktdaten:

Beitrag von 125 »

DarkDragon hat geschrieben: Welchen CHMOD hat dein CGI-BIN? Und hat dein Server überhaupt CGI-Funktionalität? Und ist es ein Windows oder ein Linux Server?
chmod ist 777
und ein Suse 9.0 Root-Server. und der server unterstützt CGI.
:( Aber er nimmt die executable trotzdem nit :(
(hab sie mit pb auf Debian compiliert -> geht nicht, deine compilierte genommen-> geht nicht :( )

pls help
mfg
125
Antworten