Announcement

Collapse
No announcement yet.

PHP aus Delphi....wie ISAPI/CGI/DLL

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • PHP aus Delphi....wie ISAPI/CGI/DLL

    Hallo zusammen,

    gibt es eine Möglichkeit in Delphi ab version 5 eine Webserver Anwendung für php zu schreiben wie es mit dem WebModulen für CGI / Win-CGI / IIS-DLL und seit Version 6 auch /Apache geht?
    Ich verstehe vorerst darunter, daß ich mir anhand eines Webmodules z.B. eine WebPageProducer, WebDispatcher etc moduliere und dann in *.php "compiliere"... (nicht gerade der richtige Ausdruck jetzt dafür, da es eine ASCII datei wird. .)

    gibt es bereits oder Ansatzweise php Komponenten für Delphi wie z.B. XML (InternetExpress) etc...?

    Sollte ich jetzt doppelpostings hinterlegen, sp liegt es daran, das eventuell von mir auf Delphi und auf php gepostet wird....

    WagI

  • #2
    soweit ich weiß nein,

    was auch nicht sinnvoll ist, da php eine eigene Skriptsprache ist, also eher sowas wie Perl, ASP, JSP

    und ISAPI Module etc, compiliert werden und eher sowas wie Servlets etc. sind

    Comment


    • #3
      @Andreas Tengicki

      danke einstweilen!
      klar, php ist eine eigene skript sprache, ich frage mich immer nur, wie ich die Auswertung des scripts also z.B.

      empfang.php
      ...........

      .html.<P>
      .head.<P>
      .title. Test Seite ./title.<P>
      ./head.<p>
      .body.<p>
      .h1. <?php echo ("hallo ich bin der text"); ?> ./h1.<P>
      ./body.<P>
      ./html.<P>

      in eine WepPageProducer bekomme.
      oder zumindestens in eine Variable...

      Hab ich da jetzt einen Denkfehler?
      Konsolenanwendung,,,...php.exe... irgendwie stehe ich jetzt auf dem Schlauch..wer kann mir weiterhelfen?

      in einer Server Umgebung wird ja das Script auch ausgeführt, wie wird es dort "gehandled"...wie bekommt der Webserever die Auswertung, die er dann sendet?

      Wag

      Comment


      • #4
        Wieso soll das php in eine WebProducer Komponente? Irgendwas versteh ich da noch nicht?

        Eintige Erklärung Du willst mit dem WebProducer php erzeugen, das dann auch noch interpretiert wird.

        Also http-request > ISAPI -> PHP (Interpreter) -> Response

        Dann spare Dir dioch PHP und mache alles mit ISAPI geht eh schneller, oder mache alles mit PGP. Aber warum der Zwitter

        Comment


        • #5
          hallo Andreas Tengicki,
          hallo zusammen,

          Der client ruft eine seite namens...empfang.php .... auf.
          der Webserver reagiert darauf und führt den "php" script uber die php.exe aus. Das Ergebnis wird dem Client über den Webserver mitgeteilt.

          Meine Frage ist, wie wird das ergebnis gehandhabt?<p>

          Wenn ich dies in eine Variable haben möchte, wie würde das in etwa aussehen...<p>

          WebPageProducer1.content := ???(ergebnis daraus..php.exe empfang.php <p>
          response.content := WebPageProducer1.content; <P>

          Danke!

          Wag

          Comment


          • #6
            Der Client ruft empfang.php

            Der WebServer bekommt einen http Request auf empfang.php

            Der WebServer erkennt, dafür ist php.exe zuständig

            php.exe tut seinen job und generiert einen repsonse, diese geht an den WebServer

            Der WebServer sendet diese Response an den Client.

            Wo soll denn jetzt das CGI/ISAPI Modul in die Architektur? Was willst Du mit Delphi machen? Wo ist das Problem? Was willst Du ändern

            Comment


            • #7
              <html>
              <head>
              <title>
              </title>
              </head>
              <body>
              <pre>
              hallo Andreas Tengicki,
              hallo zusammen,

              ich bin Anfänger in Sachen WebEntwicklung, und auch mit den
              Delphi 6 Internet Komponenten bin ich noch nicht so vertraut.
              ich habe mich in der WebModulierung mal versucht.
              Dabei habe ich für den IIS eine DLL zusammengestellt.
              Dies klappt ja auch ganz gut.
              Mich stört abert der IIS.
              Dann habe ich für Samba die CGI-EXE versucht.
              Dies klappt auch ganz gut.
              Dabei ist mir aufgefallen, das die Exe / Script in einer Art
              Shell Umgebung läuft und wenn ich das Script so aufrufe, die Auswertung
              am Bildschirm sehe.
              Nun habe ich mir gedacht, wenn ich einen eigenen WebServer mit
              den Indy Komponenten versuchen würde, müßte ich dann auch das Script
              ausführen lassen können...
              das geht auch..aber wie bekomme ich den Inhalt zurück?
              Response??
              Muß ich den Aufruf ungefähr so starten...
              ..
              Response.content := Response.ShellExecute(Handle,
              'open',
              'command.com',
              ' /Cc:\cgi-bin\Scriptinterpreter.exe c:\Scripte\Script.pl',
              'c:\windows\',
              typ);
              Ich denke mal, ich führe mal meine Alternative Beispiel vor....
              Aber bitte nicht zu sehr kritisieren...bin wirklich Anfänger!

              Ich rufe das Script über eine ShellExecute auf,
              dabei speichere ich die Information in eine Text-datei.
              diese Lese ich dann wieder aus...(leider momentan ueber eine Timer
              Komponente, da ich den Befehl noch nicht kann, dass der Vorgang "einlesen"
              erst nach Ausführen der Shell und Fertigstellen der TextDatei erfolgen soll...

              Irgendwie so...

              while...solange noch nicht ertstellt warten bzw tue was anderes...
              else
              einlesen.


              Ich möchte halt meine bereits für PHP erstellten Scripte einbinden...

              Wenn mir einer sagen könnte, wie ich die ISAPI DLL für "meinen" Server
              verwenden kann, würde ich wahrscheinlich alles in Delphi machen.
              Aber ich weiss nicht, wie ich die *.dll in meinem eigenen "ServerProgram"
              einbinden muß.

              Ich kenne eben bisher nur die *.dll für den IIS.
              Und ich möchte den IIS (Personal Web Server) nicht
              mehr einsetzen.

              Danke!

              WagI

              TEIL 2 Folgt in der nächsten Message da der text abgeschnitten wird,
              ist der beitrag auf eine bestimmte Zeichenlänge begrenzt?
              </pre>
              </body>
              </HTML>

              &#10

              Comment


              • #8
                <html>
                <head>
                <title>
                </title>
                </head>
                <body>
                <pre>

                Also (Für alle Profis nun etwas zum lachen) bitte nicht so
                arg kritisieren...wenn so zwitterhaft ist....

                mein Beispiel

                unit Unit1;

                interface

                uses
                Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
                shellapi, ExtCtrls, StdCtrls;

                type
                TForm1 = class(TForm)
                Button1: TButton;
                Memo1: TMemo;
                RadioGroup1: TRadioGroup;
                RadioGroup2: TRadioGroup;
                Label1: TLabel;
                Timer1: TTimer;
                Button2: TButton;
                procedure Button1Click(Sender: TObject);
                procedure Timer1Timer(Sender: TObject);
                procedure Button2Click(Sender: TObject);
                private
                { Private-Deklarationen }
                public
                { Public-Deklarationen }
                end;

                var
                Form1: TForm1;
                i,typ:integer;
                f: TextFile;
                EinzelneZeile,GesamterInhalt: String ;

                implementation

                {$R *.DFM}

                procedure TForm1.Button1Click(Sender: TObject);
                begin
                case RadioGroup1.ItemIndex of
                0: TYP:=SW_HIDE;
                1: TYP:=SW_MINIMIZE;
                2: TYP:=SW_RESTORE;
                3: TYP:=SW_SHOW;
                4: TYP:=SW_SHOWMAXIMIZED;
                5: TYP:=SW_SHOWMINIMIZED;
                6: TYP:=SW_SHOWMINNOACTIVE;
                7: TYP:=SW_SHOWNA;
                8: TYP:=SW_SHOWNOACTIVATE;
                9: TYP:=SW_SHOWNORMAL;
                end;

                Memo1.Clear ;
                i:= shellexecute(
                Handle,
                'open',
                'command.com',
                //'',
                ' /Cc:\php\php1.exe c:\php\test.php > c:\php\mein.txt',
                'c:\windows\',
                typ);

                // AnzeigeKontrolle der Aufruf Variablen i

                label1.caption := IntToStr(i);

                // to do...#12 Ueberpruefung, ob datei vorhanden, wenn nicht
                // nochmal versuchen...
                // Vorest noch ueber Timer Interval 1500
                Timer1.Enabled := True;

                end;

                procedure TForm1.Timer1Timer(Sender: TObject);

                begin
                AssignFile(f,'c:\php\mein.txt');
                {$i-}
                Reset(f)
                {$i+} ;
                if IOResult <> 0 then
                begin
                ShowMessage ('Fehler...');
                Exit
                end;
                // Variablen auf leer setzen
                EinzelneZeile := '';
                GesamterInhalt := '';
                // ersten 3 Zeilen uebergehen
                // da PHP Info Text am Anfang
                // generiert und ich
                // nur den HTML Code
                // haben möchte
                // Zeile 1: X-Powered-By: PHP/4.0.6
                // Zeile 2: Content-type: text/html
                // Zeile 3: leer

                if RadioGroup2.ItemIndex = 1 then
                Readln(f,EinzelneZeile);
                if RadioGroup2.ItemIndex = 2 then
                begin
                Readln(f,EinzelneZeile);
                Readln(f,EinzelneZeile);
                end;
                if RadioGroup2.ItemIndex = 3 then
                begin
                Readln(f,EinzelneZeile);
                Readln(f,EinzelneZeile);
                Readln(f,EinzelneZeile);
                end;
                if RadioGroup2.ItemIndex = 0 then
                begin

                // Zusatz Include Anweisung falls eigener Info Text
                // generiert werden soll

                end;

                // dann erst einlesen beginnen

                while not EOF(f) do
                begin
                Readln(f,EinzelneZeile);
                GesamterInhalt:= GesamterInhalt + EinzelneZeile ;
                //
                end;
                CloseFile(f);

                Memo1.Text:= GesamterInhalt;
                // memo1.Lines.Add(GesamterInhalt); // unter Delphi 6
                // PageProducer1.HTMLDoc.Add(GesamterInhalt); // unter Delphi 6
                timer1.Enabled := false;

                end;

                procedure TForm1.Button2Click(Sender: TObject);
                begin
                // Manual löschen
                Memo1.Clear;
                end;

                end.
                </pre>
                </body>
                </html&gt

                Comment


                • #9
                  P.S.
                  Ach ja...dies habe ich mit !Delphi 3.0 professional geschrieben
                  Als OS nehme ich Win 98.
                  Danke!

                  Wag

                  Comment


                  • #10
                    Hallo Rul,

                    um was geht es denn nun.

                    a) PHP Läuft bei Dir

                    b) CGI läuft bei Dir

                    c) ISAPI läuft bei Dir

                    d) Der IIS gefällt Dir nicht, mir auch nicht

                    < bis hier hin ist doch alles prima >

                    e) Du willst als Änfänger einen eigenen WebServer schreiben und beschäftigst bei dem mit der Einbindung von Skripten? Nen bißchen viel für den Anfang, oder?

                    Als Tipp noch:
                    Sollte php die Datei so öffnen daß Du sie nicht auch noch zum schreiben öffnen kannst, kannst Du versuchen Sie exklusiv zum Lesen zu öffnen

                    <pre>
                    Wenn das Request .php ist
                    dann anfrage zu php (vgl CGI Spezifikation)
                    while not offen
                    begin
                    sleep(500)
                    versuche noch mal zu öffnen
                    end
                    Hier ist das Skript fertig.

                    Jetzt senden der Datei als Response
                    </pre>

                    p.s. Win98 ist dafür wirklich die falsche Umgebung, erst Recht zum Entwickeln

                    p.p.s Ich klinke mich aus

                    Comment


                    • #11
                      Hi!

                      Rul W. hast du den Browser schon fertig?
                      Ich hab mir auch schon überlegt so was zu machen, weil es in manchen Situationen einfach vorteilhafter ist nicht immer den IIS oder so zu installieren.
                      Aber ich habe leider noch nie einen Browser programmiert und stelle für meine Fähigkeiten dass auch schwierig vor.
                      Besonders um PHP einzubinden.

                      Wenn du Ihn fertig hast oder hilfe brauchst sag bescheid.
                      Ich bin daran sehr interessiert.

                      Gruß Hendrik

                      PS: Kannst mir auch mailen, bekomm ich schneller bescheid
                      [email protected]

                      Comment


                      • #12
                        <pre>
                        hallo zusammen,
                        .
                        ich versuchs nochmal...ich hänge da einfach irgendwo fest..
                        >>> Wenn das Request .php ist // ok. oncommandget..
                        // case anweisung
                        // html = 0
                        // php = 1
                        // usw. wenn 1 dann
                        // php.exe etc

                        dann anfrage zu php (vgl CGI Spezifikation) // wo muss ich da
                        ...................... >// nachsehen. ich
                        // möchte den output
                        // des konsolenaufrufs
                        // in eine Variable
                        // haben. vorerst
                        // würde mir auch
                        // eine zwischenlösung
                        // als generierte
                        // datei reichen, die
                        // ich dann einlese,
                        // lieber wäre mir
                        // delphi stellt vor
                        // für den output
                        // eine variable zur
                        // verfügung.
                        //
                        while not offen
                        begin
                        sleep(500)
                        versuche noch mal zu öffnen
                        end
                        Hier ist das Skript fertig. // dann würde ich
                        // einer Webpagepro-
                        // ducer.content die
                        // variable zuweisen.


                        Jetzt senden der Datei als Response // wie muss das aussehen das
                        // senden. ich krieg das
                        // nicht in die Reihe.
                        //
                        <<<

                        </pre>

                        Ru

                        Comment


                        • #13
                          mein problem liegt speziel bei Delphi,
                          stell dir vor, ich befinde mich im dos fenster (Konsole),
                          dort gebe ich jetzt ein:
                          c:\type hallo.txt
                          dann erscheint am bildschirm der text von der datei hallo.txt
                          ich möchte jetzt in delphi ein memo haben,
                          wenn ich jetzt auf einen button druecke, dann sollte
                          delphi den konsolenbefehl type hallo.txt ausführen und im memo
                          anzeigen ...aber!!!!
                          der type Hallo.txt Teil soll auf der konsole passieren, delphi stellt
                          für den output eine variable zur verfügung, in der dann der output von
                          c:\type hallo.txt ist; diese variable wird dann dem memo übergeben.
                          ich will nicht die datei hallo.txt öffnen zum einlesen, sondern
                          es mit einser variablen lösen.
                          .
                          anstatt c:\type hallo.txt steht dann c:\php.exe index.php
                          es wird ja dann auch ein output erzeugt. und diesen würde ich gerne
                          in eine von delphi zur verfügung gestellten variable für diesen
                          einen aufruf. ein zweiter oder anderer aufruf erhält eine fortlaufende
                          indizierung, falls zwei aufrufe sich überschneiden...createProcess?...
                          .
                          mir gehts jetzt erstmal um den output, wie lenke ich den in eine variable?

                          Ru

                          Comment

                          Working...
                          X