CGI und C-Programm in XAMPP
Frank123
- programmiertechnik
0 Vinzenz Mai0 Frank123
0 Struppi0 Der Martin
Hallo,
ich war 'nen bischen im Netz am Suchen und bin immer wieder auf CGI gestoßen. Da ich beruflich nichts mit Webprogrammierung zu tun hab, bin ich bislang dran vorbei gelaufen. Schließlich lässt sich ja sehr viel mit HTML, PHP und JS realisieren.
Ich habe XAMPP unter Windows (ich weiß für einige ist das ganz böse) laufen. Darauf hin hab ich mir von selfHTML ein CGI-Beispiel (perl) genommen und hab das in meinen cgi-bin-Ordner gelegt und getestet. Das lief auch auf Anhieb.
Nach 'ner Weile lesen bin ich immer wieder darauf gestoßen, dass man via CGI auch kompilierte Anwendungen laufen lassen kann die Ausgaben auf STDOUT erzeugen. Das ist nunja das kleinste Problem, da bin ich ja auch zu Hause. Also habe ich 'nen kleines Programm geschrieben, welches mir eine minimale HTML-Seite ausgibt:
#include <iostream>
using namespace std;
int main()
{
cout << "<html><head><title>";
cout << "Hello world!";
cout << "</title></head>";
cout << "<body>Meine Seite</body></html>";
return 0;
}
Nun hab ich das in den cgi-bin-Ordner kopiert und versucht mittels http://localhost/meineExe.exe auszuführen. Leider bekomme ich immer nur die Meldung:
Serverfehler!
Die Anfrage kann nicht beantwortet werden, da im Server ein interner Fehler aufgetreten ist.
Fehlermeldung:
Premature end of script headers: htmltest.exe
Sofern Sie dies für eine Fehlfunktion des Servers halten, informieren Sie bitte den Webmaster hierüber.
Error 500
Ich habe auch schon probiert die Datei umzubenennen (in *.cgi), aber auch das brachte keinen Erfolg. Google hat sich leider auch nicht als sehr informativ herausgestellt bin zwar zwei mal auf das Problem gestoßen, doch die Problemlösung entpuppte sich als Konfigurationsproblem aufgrund von nicht Standardverzeichnissen. Das Problem hab ich aber nicht da alle Einstellungen in der Hinsicht stimmen.
Kann mir jemand erklären wie ich da vorgehen muss? Wenn ich irgend eine Info vergessen haben sollte, reich ich die gerne nach. Ich habe bloß leider keine Ahnung von CGI und würde mich auch mit einem guten Tutorial (was sich nicht nur mit Perl beschäftigt!!!) freuen.
Danke für jede Antwort
Gruß
Frank
Hallo,
Nach 'ner Weile lesen bin ich immer wieder darauf gestoßen, dass man via CGI auch kompilierte Anwendungen laufen lassen kann die Ausgaben auf STDOUT erzeugen. Das ist nunja das kleinste Problem, da bin ich ja auch zu Hause. Also habe ich 'nen kleines Programm geschrieben, welches mir eine minimale HTML-Seite ausgibt:
eben nicht.
#include <iostream>
using namespace std;
int main()
{
// Bevor Du HTML ausgeben kannst, musst Du mindestens den
// HTML-Header senden:
cout << "Content-type: text/html\n\n"
// auf die Header muss eine Leerzeile folgen, daher
// das \n\n
cout << "<html><head><title>";
cout << "Hello world!";
cout << "</title></head>";
cout << "<body>Meine Seite</body></html>";
return 0;
}
> Nun hab ich das in den cgi-bin-Ordner kopiert und versucht mittels http://localhost/meineExe.exe auszuführen. Leider bekomme ich immer nur die Meldung:
eine erwartete Fehlermeldung.
C oder C++ sind nicht unbedingt die besten Programmiersprachen um CGI-Anwendungen zu schreiben. OK, Windows-Shellskripte sind noch um vieles schlechter :-)
Freundliche Grüße
Vinzenz
Ok, ich hab jetzt dreimal fast die gleiche Antwort bekommen.
Das mit dem Header hatte ich einfach nicht bedacht. Der Aufbau des HTTP Protokols ist mir zwar gut bekannt, aber ich hab nur ein HTML-Dokument geschrieben. Das war dann Fehler Nummer eins.
Der zweite Fehler und dann warscheinlich auch das was mich auch ohne Hilfe weitergebracht hätte, wären halt die richtigen Suchbegriffe in Google gewesen. Statt nach der Spezifikation, hab ich nach 'nem Tutorial gesucht. Naja bin ja lernfähig.
Besten Dank an alle!
Gruß
Frank
Die Anfrage kann nicht beantwortet werden, da im Server ein interner Fehler aufgetreten ist.
Fehlermeldung:
Premature end of script headers: htmltest.exeSofern Sie dies für eine Fehlfunktion des Servers halten, informieren Sie bitte den Webmaster hierüber.
Error 500
Du bist dem Standardfehler über dem Weg gelaufen, den auch der Perleinsteiger gerne macht.
Jede Antwort von einem Server muss einen http header senden. In PHP geschieht das automatisch, aber in deiner Anwendung nicht. Konkret musst du mindestens noch ein "Content-type: text/plain\n\n" an STDOUT senden.
Struppi.
Hi,
Nach 'ner Weile lesen bin ich immer wieder darauf gestoßen, dass man via CGI auch kompilierte Anwendungen laufen lassen kann die Ausgaben auf STDOUT erzeugen.
ja, siehe http://www.w3.org/CGI/.
#include <iostream>
using namespace std;
int main()
{
cout << "<html><head><title>";
cout << "Hello world!";
cout << "</title></head>";
cout << "<body>Meine Seite</body></html>";
return 0;
}
>
> Nun hab ich das in den cgi-bin-Ordner kopiert und versucht mittels http://localhost/meineExe.exe auszuführen. Leider bekomme ich immer nur die Meldung:
>
> Serverfehler!
> Die Anfrage kann nicht beantwortet werden, da im Server ein interner Fehler aufgetreten ist.
>
> Fehlermeldung:
> Premature end of script headers: htmltest.exe
Du hast nicht berücksichtigt, dass das aufgerufene Programm anscheinend auch die HTTP-Header selbst ausgeben muss. Zumindest verstehe ich das so beim ersten Überfliegen der Spec.
Dein Apache beschwert sich nun, dass er im CGI-Output keine Leerzeile findet, die die Header vom Nutzinhalt (der ggf. leer sein kann) trennen würde.
> Google hat sich leider auch nicht als sehr informativ herausgestellt
Wie hast du das angestellt? Meine Suche nach "cgi spec" brachte <http://hoohoo.ncsa.illinois.edu/cgi/interface.html> als ersten Suchtreffer von ungefähr 8 Millionen. Auf den ersten Blick kein übler Einstieg.
> Ich habe bloß leider keine Ahnung von CGI und würde mich auch mit einem guten Tutorial (was sich nicht nur mit Perl beschäftigt!!!) freuen.
Wenn du wirklich Programmierer bist und mit den Grundlagen von HTTP vertraut, dann sollte die CGI-Spezifikation dir mehr geben als jedes Tutorial es könnte. Mir geht es jedenfalls so.
So long,
Martin
--
F: Was ist schneller: Das Licht oder der Schall?
A: Offensichtlich der Schall. Wenn man den Fernseher einschaltet, kommt immer erst der Ton, und dann erst das Bild.