CGI und C mit Server OmniHttpd - "Dokument enhielt keine Daten"
Peter
- cgi
Moin moin!
Ich brauche mal 'nen Expertentip!
Ich muss für ein Praktikum ein paar CGIs in C programmieren. Untenstehender Quellcode sollte
zunächst nur der erste Test sein. Rufe ich diesen allerdings aus einem
HTML-Dokument auf, erhalte ich die Meldung: "Das Dokument enhielt keine Daten".
Dieses ist ja die typische Meldung, wenn man den Header
printf("Content-type: text/html\n\n");
vergessen hat. Aber daran liegt es nicht. Perl Skripte, die sich im gleichen Verzeichnis befinden lassen
sich ohne Probleme starten und tun auch was sie sollen. Der Server Root und
das CGI Verzeichnis sind also korrekt eingestellt.
In der DOS shell läßt sich untenstehendes C-Programm auch ohne Probleme ausführen
und liefert die korrekte Ausgabe.
Muss ich .exe- Dateien im Server irgendwie besonders berücksichtigen bzw. irgendwelche
besonderen Einstellungen vornehmnen?
Ich benutze übrigens den Server OmnihttpD.
Tips?? Ratschläge??
Vielen Dank!
MfG Peter!
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
printf("Content-type: text/html\n\n");
printf("<HTML><HEAD><TITLE>Mahlzeit!</TITLE></HEAD><BODY>");
printf("<H1>MAHLZEIT!!</H1>");
printf("</BODY></HTML>");
} /* end main */
Ich habe beim Kopieren irgendwie das return 0; verschluckt!
Das ist also auch nicht das Problem! Nur nicht, dass ich falsche Fährten legen will!
MfG Peter!
Hier also der korrekte Quellcode (der auch nicht funktioniert!)
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
printf("Content-type: text/html\n\n");
printf("<HTML><HEAD><TITLE>Mahlzeit!</TITLE></HEAD><BODY>");
printf("<H1>MAHLZEIT!!</H1>");
printf("</BODY></HTML>");
return 0;
} /* end main */
Hi Peter,
printf("Content-type: text/html\n\n");
meine C-Kenntnisse sind etliche Jahre alt, aber auf Verdacht hin:
Wohin schreibt "printf"? Nach stdout oder nach stderr?
CGI-Ausgaben müssen in stdout ankommen - stderr "fällt hinter die Heizung".
Viele Grüße
Michael
Hoi Michael,
printf("Content-type: text/html\n\n");
Wohin schreibt "printf"? Nach stdout oder nach stderr?
Nach 'stdout'.
CGI-Ausgaben müssen in stdout ankommen - stderr "fällt hinter die Heizung".
Es faellt normal in das error-log ;-)
Tatsache ist, dass der einzige Fehler, den ich mir vorstellen kann, im
Aufrufungs-Mechanismus liegt -- oder funktioniert das Ganze im Direktaufruf auch
nicht? Dann waere naemlich wahrscheinlich dein Webserver nicht korrekt
konfiguriert...
Gruesse,
CK
Hoi Michael,
printf("Content-type: text/html\n\n");
Wohin schreibt "printf"? Nach stdout oder nach stderr?
Nach 'stdout'.
CGI-Ausgaben müssen in stdout ankommen - stderr "fällt hinter die Heizung".
Es faellt normal in das error-log ;-)
Tatsache ist, dass der einzige Fehler, den ich mir vorstellen kann, im
Aufrufungs-Mechanismus liegt -- oder funktioniert das Ganze im Direktaufruf auch
nicht? Dann waere naemlich wahrscheinlich dein Webserver nicht korrekt
konfiguriert...
Also im Direktaufruf funktioniert das ganze. Vermutlich lieg es am Server - aber woran?
Muss ich irgendwo beim Server eine Einstellung vornehmen, dass er .exe Dateien ausführen
kann? Wie gesagt, meine Perl und PHP Skripte laufen. Gibt es irgendwas, was ich bei ausführbaren Datein
berücksichtigen muss?
gebt mir Tipps. Bin doch nur ein armer Etechniker ...:-)
MfG Peter!
Gruesse,
CK
Hi Peter,
Also im Direktaufruf funktioniert das ganze. Vermutlich
lieg es am Server - aber woran?
Muss ich irgendwo beim Server eine Einstellung vornehmen,
dass er .exe Dateien ausführen
kann? Wie gesagt, meine Perl und PHP Skripte laufen.
Gibt es irgendwas, was ich bei ausführbaren Datein
berücksichtigen muss?
gebt mir Tipps. Bin doch nur ein armer Etechniker ...:-)
die Quelle beschreibt zwar nicht exakt Deinen Webserver, aber die Art der Problematik kann bei OmniHTTPD auch nicht wesentlich anders sein als bei den mir bekannten Webservern:
http://aktuell.de.selfhtml.org/artikel/cgiperl/inbetriebnahme/#a6
Viele Grüße
Michael