int21h: PHP als CGI

Hi, ich habe mir einen eigenen Webserver in Java geschrieben, und will mit folgender Anweisung beliebige PHP Files an den PHP Parser weiterreichen:
r.exec("E:\PHP\php.exe -q -f " + rootDir + file.replace('/', File.separatorChar),envVariables);
(Ein Aufruf könnte z.B. folgende Form haben:
E:\php\php.exe -q -f G:\programmieren\java\projects\webserver\htdocs\php\script.php)

Als Ausgabe bekomme ich jedoch stes nur folgendes:
-------------------------------------
Status: 404
Content-type: text/html
X-Powered-By: PHP/4.3.3

No input file specified.
------------------------------------

Wenn ich exakt den selben Aufruf in die Konsole eingebe, funktioniert es einwandfrei! Weiß da jemand weiter?

  1. hallo,

    ich habe mir einen eigenen Webserver in Java geschrieben

    Großartig. Bloß kennt den natürlich außer dir keiner.

    Wenn ich exakt den selben Aufruf in die Konsole eingebe, funktioniert es einwandfrei! Weiß da jemand weiter?

    Nö. Da ja niemand deinen Java-Server kennt und weiß, was der macht.

    Grüße aus Berlin

    Christoph S.

    1. ich habe mir einen eigenen Webserver in Java geschrieben
      Großartig. Bloß kennt den natürlich außer dir keiner.

      Und? Braucht man zur Bewältigung eines Problems immer den Sourcecode
      der beteiligten Programme?

      Wenn ich exakt den selben Aufruf in die Konsole eingebe, funktioniert es einwandfrei! Weiß da jemand weiter?
      Nö. Da ja niemand deinen Java-Server kennt und weiß, was der macht.

      Es ist völlig irrelevant, WIE mein Server arbeitet, da dass Problem lediglich den Aufruf des PHP-Parsers betrifft. Da ich die nötige Umgebung für den Parser (CGI/1.1 Spezifikation) geschaffen habe, liegt das Problem wohl eher bei einer Einstellung in der php.ini oder ähnlichem...

      1. hallo,

        Braucht man zur Bewältigung eines Problems immer den Sourcecode der beteiligten Programme?

        Nein. Nicht unbedingt den Sourcecode, aber ein Verständnis dafür, was das Programm macht, und was nicht. Es ist leicht, ein Programm zu überfordern, wenn man es nicht kennt.

        Es ist völlig irrelevant, WIE mein Server arbeitet

        Da bin ich nicht so sicher. Dein Scriptaufruf funktioniert von der Konsole aus  -  also ist die php.ini höchstwahrscheinlich in Ordnung.

        Da ich die nötige Umgebung für den Parser (CGI/1.1 Spezifikation) geschaffen habe

        Das wage ich zu bezweifeln, jedenfalls sofern es PHP betrifft. Wäre diese "Umgebung" korrekt, müßte ja alles fehlerfrei laufen, und nicht nur von der Konsole aus.

        Grüße aus Berlin

        Christoph S.

  2. Hi int21h,

    Hi, ich habe mir einen eigenen Webserver in Java geschrieben, und will mit folgender Anweisung beliebige PHP Files an den PHP Parser weiterreichen:
    r.exec("E:\PHP\php.exe -q -f " + rootDir + file.replace('/', File.separatorChar),envVariables);

    Versuch doch mal für PHP die Umgebung zu schaffen die es erwartet :-)
    http://hoohoo.ncsa.uiuc.edu/cgi/interface.html

    Gruß
      Christian

    1. Versuch doch mal für PHP die Umgebung zu schaffen die es erwartet :-)
      http://hoohoo.ncsa.uiuc.edu/cgi/interface.html

      Ich habe die komplette CGI/1.1 Spezifikation umgesetzt. D.h. alle notwendigen Umgebubungsvariablen sind gesetzt, und die POST Daten des HTTP-Requests stelle ich dem PHP Parser zur Verfügung.
      Das kann es also nicht sein...

      1. Guten morgen,

        Ich habe die komplette CGI/1.1 Spezifikation umgesetzt. D.h. alle notwendigen Umgebubungsvariablen sind gesetzt, und die POST Daten des HTTP-Requests stelle ich dem PHP Parser zur Verfügung.

        Wie hast du das getestet?

        Und offensichtlich wird dein -q ja von PHP nicht beachtet, da du ja die php Header bekommst.
        Teste doch erst mal ohne Optionen.
        Und Moment da war noch was .... such .... da.
        Schau mal ins Manual unter http://www.php.net/manual/en/security.cgi-bin.php  nach force-cgi-redirect, auch in der php.ini gibt es einen Schalter dafür.

        Gruß
          Christian

  3. Hi,

    Hi, ich habe mir einen eigenen Webserver in Java geschrieben, und will mit folgender Anweisung beliebige PHP Files an den PHP Parser weiterreichen:
    r.exec("E:\PHP\php.exe -q -f " + rootDir + file.replace('/', File.separatorChar),envVariables);
    (Ein Aufruf könnte z.B. folgende Form haben:
    E:\php\php.exe -q -f G:\programmieren\java\projects\webserver\htdocs\php\script.php)

    Sieht der Aufruf wirklich so aus?
    Hast Du das überprüft?

    Als Ausgabe bekomme ich jedoch stes nur folgendes:

    Status: 404
    Content-type: text/html
    X-Powered-By: PHP/4.3.3

    No input file specified.

    Und woher sollen wir wissen, was in Deinem Webserver passiert?
    Welcher Programmcode führt vom r.exec zur Ausgabe dieser Meldung?
    Was hat Dein Debugging dazu ergeben?

    cu,
    Andreas

    --
    Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
    http://mud-guard.de/? http://www.andreas-waechter.de/ http://www.helpers.de/
  4. Hey,

    r.exec("E:\PHP\php.exe -q -f " + rootDir + file.replace('/', File.separatorChar),envVariables);

    Der sog. PHP-Interpreter ist da immer etwas wählerisch mit den Argumenten. Ich glaube diese Befehlszeilenargumente wurden etwas mühselig, halbherzig und so ziemlich als letztes hineingebastelt.
    Und ganz speziell der angegebene Dateiname wird ja - wie gesehen - gerne (oder sporadisch) ignoriert; den mußt du unbedingt als SCRIPT_FILENAME angeben. Außerdem reagieren neuere PHP-Versionen allergisch auf korrekte PATH_INFO-Einstellungen - weil die PHP-CGI Variante (anders als es der Name vermuten läßt) auf Apache optimiert wurde.
    Und sowohl PHP als auch Apache orientieren sich stark an dieser bescheuerten Pseudo-CGI-Spezifikation, an der sich vor Jahren mal irgend so ein paar Hirnis versucht hatten (zum Glück nie offizieller Standard geworden).

    Als überschaubare InfoQuelle hier noch: http://nanoweb.si.kz/ - der PHP-Webserver.

    MsF,
    milky

    --
    Alkohl eignet sich auch gut als Lösungsmittel für Probleme aller Art.