PHP-Interpreter Funktionsprinzip?
-
Hi Leute!
Sagt mal, weiss jemand von euch wie ein PHP-Interpreter funktioniert. Damit meine ich nicht, wie er Scripte ausführt, sondern wie er den Code erhält, ausführt und dann an den Webserver als HTML-Seite zurückgibt. Weiss jemand von euch wie sowas funktioniert? Es gibt ja bei PHP eine PHP.EXE, und da nehme ich mal stark an das das der Interpreter ist.Weis jemand wie so ein request verarbeitet wird, und wie das dann an den Webserver gelangt? Ist das in den Webserver integriert, das PHP-Tags mit PHP.EXE ausgeführt werden??? Fragen über fragen
...
Grüsse,
~cp code_pilot :p
-
Stichwort: CGI
Der Server bekommt eine Anfrage - Client will index.php haben.
Server checkt: *.php - das ist eine Datei die ich an PHP.exe weiterreichen muss.
PHP.exe wird gestartet.PHP.exe holt sich die ganzen Umgebungsvariablen, parst die GET und POST Daten, etc. Der PHP Code wird ausgeführt. Ausgabe erfolgt nach stdout -> der Webserver kümmert sich darum, den produzierten Text an den Client weiter zugeben.
Das ist jetzt sehr primitiv erklärt.
-
Hi Shade of Mine!
Ja so hab ich mir das auch gedacht. Ist es vielleicht möglich, das man ein "Hello World"-Programm schreibt, dass man über den Browser aufruft, und der Server dann das "Hello World" im Browser ausgibt?
Also ein ganz stinknormales
printf("Hello World\n");
das aber anstatt auf einer Shell im Browser ausgegeben wird. Das würde mir schon weiterhelfen.
Und nochwas, kann ich Apache irgendwie sagen, er soll eine Dateiendung mit einem dafür vorgesehenen Programm aufrufen? Ich kenn mich nicht so aus mit Apache konfiguration, aber das muss ja irgendwie möglich sein ...Grüsse,
code_pilot :p
-
Hi!
Ich hab jetzt mal was getesetet, aber bekomme es nicht zum laufen.Das Programm:
#pragma hdrstop #include <condefs.h> #include <stdio.h> #include <stdlib.h> //--------------------------------------------------------------------------- #pragma argsused int main(int argc, char* argv[]) { fprintf(stdout, "X-Powered-By: Test\r\nContent-type: text/html\r\n\r\n<html>Hello World</html>"); return 0; }
ist abgelegt in c:\apache\test als test.exe.
Jetzt will ich, das dieses Programm gestartet und ausgeführt wird, wenn der Webserver eine .SSC-Datei bekommt. Dafür habe ich dann die httpd.conf editiert, und folgendes hinzugefügt (äquivalent zu php):
ScriptAlias /ssc/ "c:/apache/test/" AddType application/x-httpd-ssc .ssc Action application/x-httpd-ssc "/test/test.exe"
ich habe das ganz einfach den PHP-Einstellungen nachgeahmt. Aber passieren tut nix, der Webserver meldet immer 404: Seite nicht gefunden. (Habe Apache natürlich neu gestartet)...
Gruss,
~cp code_pilot
-
code_pilot schrieb:
Action application/x-httpd-ssc "/test/test.exe"
Darf dieser Pfad relativ sein?
btw: Ich bin mir nicht sicher ob du beim Apache einfach auf stdout schreiben kannst. Bei einem Webserver den ich mal hatte wurde das Dateihandle als Parameter an main übergeben.
Ich bin mir aber ziemlich sicher, dass das alles in der Apache-Doku beschrieben ist.
-
Guck mal das hier steht bei mir immer in der error.log:
[Mon Jan 12 14:59:36 2004] [error] [client 127.0.0.1] File does not exist: c:/apache/htdocs/test/test.exe/test/atest.ssc
es sollte doch eher heißen:
c:/apache/test/test.exe test/atest.ssc
und die Datei atest.ssc ist in c:\apache\htdocs\test\atest.ssc (server root: c:\apache\htdocs\)
Ich verstehe das nicht, weil der genauso konfiguriert ist wie PHP, nur PHP wird ausgeführt
Wie meinst du das mit der Datei? Hier ist ein Thema, das mir aber auch net weitergeholfen hat. Die benutzen aber auch kein Dateihandle und Apache: http://www.c-plusplus.net/forum/viewtopic.php?t=57861
Hmmmm... *grummel*
gruss,
~cp code_pilot
-
Ahh ich habe die Lösung gefunden:
ScriptAlias /ssc/ "c:/apache/ssc/" AddType application/x-httpd-ssc .ssc Action application/x-httpd-ssc "/ssc/ssc.exe"
und es geht! der alias war falsch!
-
hä?
logisch habe ich den apache genommen... was denn sonst!
-
Aber eines verstehe ich noch nicht.
Ich habe ein Formular. Wenn ich dort die Daten über POST versende, funktioniert das mit PHP, bei meinem Programm finde ich die Werte aber nie. Wie wird ein POST-Request ausgeführt? Weil irgendwie müssen ja die Daten zum PHP-Interpreter gelangen, aber anscheinend nicht über Umgebungsvariablen bzw. Pfadübergaben.
Weis das jemand??
Gruss
~cp code_pilot
-
wenn du diesen thread ein wenig genauer gelesen hättest
http://www.c-plusplus.net/forum/viewtopic.php?t=57861
wüßtest du wie
da steht nämlich folgendes testprogramm von mir:
int main(int argc, char **argv, char **argenv) { char *content_type = NULL; unsigned long content_length = 0; unsigned long offset = 0; char **aptr; puts("Content-type: text/html\n\n"); fflush(stdout); puts("Werte der Umgebungsvariablen:\n<br>"); aptr = argenv; int i=0; while (*aptr){ puts(*(aptr++)); puts("\n<br>"); i++; } fflush(stdout); puts("Path:\n<br>"); puts(*(argenv+(i-1))); fflush(stdout); }
bye