PHP als CGI
int21h
- php
0 Christoph Schnauß0 Christian H.0 int21h
0 MudGuard0 milky
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?
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.
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...
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.
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
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...
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
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.3No 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
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