PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Apache, C++ als Servrskript


sj-b
02.08.2007, 04:22
Moin.

Gibt es eine Möglichkeit mit htacces ein Requestmuster
zu setzen, bei dem Apache die angefragte Datei nicht
zusendet bzw. durch den phpparser jagt und die dynamisch
generierte Antwort zusendet sondern ein Programm
in C++ aufruft mit der Request-Uri, dem HTTP-Cookie und
dass der return des Programmes als Serverantwort
zurückgeschickt wird?

Habe gehört, das soll mit cgi möglich sein,
finde aber nur Tutorials, wo damit scheinbar erklärt wird,
wie man ein Gästebuch programmiert, verwendet
wie php oO

Ich will auch keine execute Funktion in php, dass
der Rückgabewert der Funktion gleich der Rückgabe
des Programmes ist mit einem echo davor.

#include <cstdlib>
#include <iostream>
using namespace std;

char * main(char * http_cookie, char * request_uri)
{
char * request;
sprintf(request, "Dein Request: %s<br>\nMitgesendeter Cookie: %s", request_uri, http_cookie);

return request;
}


Felix Kaiser
02.08.2007, 10:42
Ja das ist richtig. CGI ist ja nur eine Schnittstelle die es ermöglicht Anwendungen auszuführen, wobei das ausführbare Binärdateien sein können, aber auch Skripte, bei denen in der ersten Zeile der Verweis auf den Interpreter definiert ist, so wie es unter Unix üblich ist. Diese Dateien müssen natürlich mit dem Executable-Flag versehen werden, da sonst keine Ausführung möglich ist.

Dein Beispielcode geht so natürlich nicht. Du musst schon ein normales Programm erstellen mit einem gültigen main(). Die Standardausgabe wird umgelenkt in die Webserververbindung und sämtliche Informationen, die du vom Server zu erwarten hast, findest du im Environment.

Ob da C++ jetzt so eine gute Wahl ist sei mal dahingestellt. Schließlich musst du die Anwendung erst kompilieren und linken. Daher nutzt man für CGI meistens Skriptsprachen, am häufigsten Perl. Dazu findest du auch in SelfHTML ein paar Beispiele. Das solltest du dir mal anschauen!

sj-b
02.08.2007, 15:29
Wenn ich einfache Skripts benutzen will, benutze ich php und
brauch dafür cgi nicht.
Ich habe nen xampp am Laufen. Kannst du mir sagen,
was ich machen soll und nen Beispiel cpp code posten für hello world,
damit ich schonmal nen Ansatz habe, wie das geht?

Jack
02.08.2007, 16:06
Hi,

unten findest Du ein Beispielprogramm. Bei CGI musst Du Dich allerdings um alles selber kümmern, sofern Du nicht eine passende Bibliothek einsetzt (hab grad keine zur Hand, vielleicht kann Dir jemand anders eine nennen).
Einlesen solltest Du Dich auf jeden Fall in die Umgebungsvariablen, die Dir der Webserver bereitstellt, sowie die Headerzeilen, die Du selbst an den Browser schicken musst.


#include <iostream>

using namespace std;

int main(int argc, char **args, char **env) {
cout << "Content-Type: text/plain\n\n"; // Wir teilen dem Browser mit, dass er Text von uns erhält
cout << "Hallo Welt!"; // Unser Text
return 0;
}


Ok, das Proggie ist nicht getestet, evtl. brauchts \r\n statt \n, weiss ich grad nicht, musst mal ausprobieren.

Felix Kaiser
02.08.2007, 16:13
Immer CRLF senden, LF allein reicht nicht.

sj-b
02.08.2007, 16:45
Ahhh! Man kann die ganze Serverantwort schreiben! Perfekt!
Und ja, doppeltes CRLF zwischen HttpVars und Content.
Das hilft mir weiter, Danke.

Jan Krüger
02.08.2007, 20:31
Lies die CGI-Spezifikation, wenn du es sehr genau wissen willst. Da steht alles drin, was du nie wissen wolltest. ;)