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


  • Mod

    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


Anmelden zum Antworten