# eigener Java-Server => PHP einbauen



## Nick H. (30. Jun 2005)

ich wusst schon das das nicht allzu einfach sein kann
wie ihr wisst hab ich ja einen Server geproggt
jetzt will ich auch noch PHP einbauen

also hab ich mir PHP runtergeladen
das übersetzt mir die PHP Skripte
aber wie genau spreche ich mit Java jetzt das Programm an das mir die Skripte übersetzt?
muss ich erst mit C++ eine Schnittstelle proggen oder geht das so?

wenn ich jetzt mit dem Parser eine PHP-Datei öffne
gibt er sie in Html Form in der Konsole aus

genau das brauch ich auch
nur wie kann ich jetzt von Java aus das Progg ansprechen?
also wie wenn ich es von der Konsole aufrufen würde
nur halt von meinem Progg


----------



## byte (30. Jun 2005)

Nick H. hat gesagt.:
			
		

> nur wie kann ich jetzt von Java aus das Progg ansprechen?
> also wie wenn ich es von der Konsole aufrufen würde
> nur halt von meinem Progg



http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Runtime.html#exec(java.lang.String) ?


----------



## Nick H. (1. Jul 2005)

danke erstmal
werds mir anschauen

auch wenn ich nicht verstehe warum du auf eine alte Doc verlinkst...


----------



## byte (1. Jul 2005)

nostalgie 

aber keine angst, die Runtime gibts seit 1.0


----------



## Nick H. (1. Jul 2005)

Danke nochmal habs hinbekommen
das war viel einfacher als ichs mir vorgestellt hab
weiß jemand woher ich eine zirmlich große Php-Seite bekomm?
damit ich mal ausprobieren kann wie das mit dem Speed aussieht
immerhin muss das ganze ja auch noch durch php-cgi laufen

aber runterladen is ja bei Php nicht einfach so...


----------



## KSG9|sebastian (1. Jul 2005)

> aber runterladen is ja bei Php nicht einfach so...


suchst du irgendwas php-mäßiges ?


nimm ein kleines CMS oder sowas...such bei google, da findest du genug!


----------



## Nick H. (1. Jul 2005)

ne ich brauch etwas großes das auch Daten über Post empfangen muss usw.
bei Google find ich da nix

und ich weiß noch nicht ob ein Server Post unterstützt
da ich nicht weiß was genau das eigentlich bringen soll...

was das jemand?


----------



## byte (1. Jul 2005)

post is ne http method zum senden von parametern ... oder was wolltest du nu wissen? :?: 

über php kann ich dir nix erzählen. dafür biste auch im falschen board hier.


----------



## Nick H. (1. Jul 2005)

nene genau das wohlt ich wissen

aber wie genau funzt das nu?
wie werden den die Parameter übergeben?
was muss der Server dafür machen?


----------



## byte (1. Jul 2005)

das sind sehr allgemeine fragen. du solltest mal nach http-protokoll googlen. die zwei wichtigsten methoden von http sind GET und POST. wenn du z.b. im browser auf nen link klickst, dann erzeugt das http protokoll eine entsprechende http-nachricht mit Method=GET und der url der anfrage. diese nachricht wird als REQUEST an den server geschickt. der server muss diesen REQUEST lesen, interpretieren und mit einer entsprechenden HTTP-RESPONSE antworten. die RESPONSE enthält u.a. einen statuscode (200=OK, 404=File not found, ...) und ggf. den content (z.b. eine html datei oder ein bild). der client kann diese response dann entsprechend anzeigen bzw. weiterverarbeiten.


----------



## Nick H. (1. Jul 2005)

das wusst ich auch
nur leider hat das nix mit POST zu tun ;-)
ich werd trotzdem mal meinen Freund den Gockel fragen...


----------



## byte (1. Jul 2005)

was willste denn nun wissen? POST ist quasi das selbe wie GET, nur dass zusätzlich im HTTP REQUEST parameter mitgeschickt werden, z.b. über ne html form. diese können dann am server ausgelesen werden. per GET kann man auch parameter übertragen und zwar über die url, z.b. http://www.domain/datei.html?foo=3&bar=7


----------



## Nick H. (1. Jul 2005)

ah stimmt jetzt blick ichs
habs auch schon in den Server eingebaut
(die GET Methode POST muss ich mir erstmal irgendwo durchlesen)

aber wie kann ich jetzt ausprobieren ob das ganze funktioniert?
ich bräucht einfach ein Skript das den Get Parameter ausliest
und ihn dann wieder gibt

weiß jemand wo es sowas gibt?
ich such jetzt schon 2 Stunden
find aber nur irgendwelche Proggs für Gästebücher usw.


----------



## pappenpeter (1. Jul 2005)

Also, hab lang nix mehr mit php gemacht.. Aber phpinfo sollte die php funktionalität testen.. oder willst du nur wissen ob das get geht?

ansonsten. HTML seite machen..

<?  // glaube so leitet man phpcode ein..
phpinfo();
?>

Dann sollte eine PHP status seite kommen..


----------



## Nick H. (1. Jul 2005)

php geht
so viel php kann sogar ich ;-)
ich wollt bloß wissen ob das GET geht
hab jetzt auch ein paar Skripte gefunden
es kommt aber immer die Fehlermeldung
"Variable ... undefined"

muss ich dem Skript ne Variable übergeben?
(ausser die GET Variablen)

irgendwie steig ich da nicht so dahinter
was für eine Variable der überhaupt von mir will
wo soll ich die den hernehmen?

das Problem ist das das bei allen Skripten
(jedenfalls bei komplexeren) so ist

aber ich hab keinen blaßen schimmer wo ich die Variablen hernehmen soll...

ich frag auch gleich mal in nem PHP Forum vielleicht wissen die ja was über PHP...


----------



## pappenpeter (1. Jul 2005)

Mach dir doch nen Formular und übermittele das per GET an ein php script das dir dann eine Ausgabe gibt oder so..

Bei formularen kannst du GET oder POST als option mitgeben.. Bastelst dir da halt nen textfeld. Dem gibst du einen namen und einen Button drunter. Bei drücken auf den Button wird dann der Inhalt des Feldes per GET an das selbe Dokument geschickt und per PHP ausgegeben.. Ist eigentlich einfach zu programmieren und du kannst testen ob GET geht oder ob es an etwas anderem liegt..


----------



## Nick H. (2. Jul 2005)

das ist ja das Problem

so viel Php kann ich nicht
deswegen frag ich ja ob jemand sowas hat

ich hab die GET-Parameter übrigens einfach als Parameter mit exec() an den PHP Interpreter übergeben
das stimmt so oder?

seit eben bin ich noch kein Stück weiter...
ich frag mich was Php da für komische Variablen will die es gar nicht gibt


----------



## byte (2. Jul 2005)

du proggst einen eigenen server aber weisst nicht wie du mal eben ein formularfeld erzeugst? oha...

du brauchst dafür nicht mal php. das ist einfachstes html:


```
<form action="testy" method="post">
  <input name="input" type="text" value="foo">
  <input name="button" type="submit" value="bar">
</form>
```

als form method entweder post oder get. post macht mehr sinn, denn dann werden die parameter mit übertragen, in diesem fall der wert des textfeldes. aber kA wie du get mit deinem server testen willst, denn ich hab keinen plan wie du ihn implementiert hast und welche funktionalität er schon hat. die einfachste methode um get zu testen, ist ein request über den browser an den server zu schicken.


----------



## Nick H. (2. Jul 2005)

achso ich dachte du meinst ich soll so ein Feld in Php machen
ich werd das mal probieren


----------



## Nick H. (2. Jul 2005)

jetzt weiß ich was ich falsch mache
die Parameter kommen gar nicht bei dem Script an

aber wie genau muss ich dem Interpreter den die Parameter übergeben?


----------



## byte (2. Jul 2005)

die frage kann man dir schwer beantworten, da du bisher sehr wenige anhaltspunkte gegeben hast, wie du deinen "server" programmiert hast.

eine gängige möglichkeit an die parameter zu kommen, ist über eine presentation layer also servlets oder jsp. bei servlets kannst du dann über request.getParameter() auf die parameter zugreifen. da du das aber anscheinend alles selbst machst und vor allem php einbindest, kann ich dir da nicht weiterhelfen.


----------



## Bleiglanz (2. Jul 2005)

kann dein server überhaupt post requests verarbeiten?

die parameter stehen am ende des requests (nach einer leerzeile), du musst diesen text parsen


----------



## Bleiglanz (2. Jul 2005)

BTW musst du der php.exe alle Umgebungsvariablen "mitgeben", die so im allgemeinen verlangt werden....

nicht ganz trivial


----------



## Nick H. (2. Jul 2005)

@byto ne das ist ja nicht das Problem
an die Parameter komm ich ja dran
die hab ich in einem ganz normalen String gespeichert
nur wie gebe ich diese Strings jetzt an den PHP-Interpreter weiter?

>>BTW musst du der php.exe alle Umgebungsvariablen "mitgeben", die so im allgemeinen verlangt werden.... 

das hab ich mir auch schon gedacht
du weißt nicht zufällig welche das sind oder?


----------



## Nick H. (2. Jul 2005)

oh man bin ich blöd
du hattest recht die posts haben ja einen body
aber den lies ich ja gar nicht auslesen
weil man den bei Get nicht braucht

dann ist jetzt klar warum das alles nicht klappt

ich muss aber trotzdem noch wissen wie ich die Variablen die ich jetzt wirklich habe dem Interpreter richtig übergebe

und welche allgemeinen Umgebungsvariablen das sind


----------



## Bleiglanz (2. Jul 2005)

ruf halt mal phpinfo(); irgendwo auf einem apachen auf, dann siehst du schon was da ist und was die PHP skripten i.A. so erwareten


----------



## Nick H. (2. Jul 2005)

gute idee probier ich mal aus...


----------



## Nick H. (2. Jul 2005)

ich hab mal bei Apache in die Anleitung geguckt
dort war ein Link dazu
da stand welche Variablen man alle braucht

jetzt ist nur noch die Frage wie ich die Variablen dem Interpreter übergeben soll
das klappt irgendwie nicht


----------



## Bleiglanz (2. Jul 2005)

schau mal Runtime genau an....

public Process exec(String[] cmdarray,
                    String[] envp)
             throws IOException

    Executes the specified command and arguments in a separate process with the specified environment.

    This is a convenience method. An invocation of the form exec(cmdarray, envp) behaves in exactly the same way as the invocation exec(cmdarray, envp, null).

    Parameters:
        cmdarray - array containing the command to call and its arguments.
        envp - array of strings, each element of which has environment variable settings in the format name=value, or null if the subprocess should inherit the environment of the current process.


----------



## Nick H. (2. Jul 2005)

ich dachte eigentlich das ich das genau so gemacht hab
ich hab nämlich in die Doku geschaut
na egal probier ichs nochmal
vielleicht hab ich da ja was falsch gemacht

das muss doch dann in der Konsole so aussehen:

php-cgi -f test.php HTTP_USER_AGENT=irgendwas

so hab ichs nämlich in die Konsole eingegeben
aber es kam trotzdem nur "undefined Variable HTTP_USER_AGENT"


----------



## Nick H. (3. Jul 2005)

da muss es einen Trick geben
ich hab jetzt meinen ganzen Server neu geproggt
so das er auch Posts verarbeiten kann
und den User Agent einlesen

aber ich schaf es einfach nicht den User-Agent an den Interpreter zu übergeben...

und dann hät ich noch ne Frage:
wenn ich jetztin eine Html Seite eine Form einbaue
die zB über Post w1=text schickt

was bringt mir das dann?
was muss ich den wenn ich das ausgelesen hab damit machen?
die Html Seiten sind ja statisch
also können die ja nix damit anfangen
also wem soll ich die Parameter den schicken?
oder bringen die nur im zusammenhang mit php was?


----------



## byte (3. Jul 2005)

.html seiten sind statisch, ja. die können erstmal wenig mit parametern anfangen, ausser sie z.b. über ne form zum server zu schicken. .php, .jsp oder servlets sind dynamisch, nutzen aber trotzdem html code zur visualisierung im webbrowser.


----------



## Bleiglanz (3. Jul 2005)

oder bringen die nur im zusammenhang mit php was?

ganz genau

du musst den in php hineinstecken ($_POST["namedesparams"])


----------



## Nick H. (3. Jul 2005)

ich hab das jetzt geblickt mit dem Interpreter
die meinen ja ganz normale Umgebungsvariablen
ich dachte die meinen was spezielles
deswegen hab ich das nie geblickt

was zufällig grad jemand den Konsolen Befehl um Umgebungsvariablen Temporär zu setzen?


----------



## Nick H. (3. Jul 2005)

ah der Befehl war set
habs auch ausprobiert
geht aber genau so wenig wie immer
ich hab set HTTP_USER_AGENT=Firefox
eingegeben

dann probier ich das teil zu interpreten
aber es kommt immer noch die Fehlermeldung
undefined Variable HTTP_USER_AGENT

auch wenn ich sie in der Systemsteuerung also nicht nur Temporär setze

da muss es doch irgendwo einen Trick geben...


----------



## Bleiglanz (3. Jul 2005)

hast du das jetzt probiert oder nicht

alle vars als "key=value" in ein String[] und exec:



exec

public Process exec(String command,
                    String[] envp,
                    File dir)
             throws IOException

    Executes the specified string command in a separate process with the specified environment and working directory.

    This is a convenience method. An invocation of the form exec(command, envp, dir) behaves in exactly the same way as the invocation exec(cmdarray, envp, dir), where cmdarray is an array of all the tokens in command.

    More precisely, the command string is broken into tokens using a StringTokenizer created by the call new StringTokenizer(command) with no further modification of the character categories. The tokens produced by the tokenizer are then placed in the new string array cmdarray, in the same order.

    Parameters:
        command - a specified system command.
        envp - array of strings, each element of which has environment variable settings in the format name=value, or null if the subprocess should inherit the environment of the current process.
        dir - the working directory of the subprocess, or null if the subprocess should inherit the working directory of the current process.


----------



## Nick H. (3. Jul 2005)

oh stimmt das hab ich vergessen
werd ich gleich mal ausprobieren


----------



## Nick H. (3. Jul 2005)

hab ich jetzt auch ausprobiert
genau das gleiche ergebniss er findet die Variablen nicht:

private Process proc;
private String[] env = {"HTTP_USER_AGENT=Firefox"};
private String datei;

Runtime run = Runtime.getRuntime();
proc = run.exec("php-cgi -f " + datei, env);

was mach ich nur falsch...


----------



## Seven (3. Jul 2005)

Ich hab nen Plan
du schickst mir des GANZE (also alle Datein und so)
dann guck ich was falsch war und schick dir die daten zurüch
nätürlich mit einer Textdatei als anhang wo dann drinn steht was falsch war und was ich geändert hab


----------



## Nick H. (3. Jul 2005)

juhu ich habs hinbekommen!

schuld war die neue PHP Version
dort ist standardmäßig Register_Globals off!

also war das Script schuld und nicht mein Server
jetzt hab ich auf on gestellt und alles funkt!

danke nochmal an alle die mir geholfen haben


----------



## Seven (3. Jul 2005)

Gern gescheh´n


----------



## Seven (3. Jul 2005)

sag mal kannste mir mal die daten schicken ich programmier au schon sei tagen an meinem rum aber ich kriegs einfach nicht hin

dann kann ich die nämlich vergleichen


----------



## Seven (3. Jul 2005)

aso meine e-mail adresse:

seven3@gmx.net


----------



## AlArenal (3. Jul 2005)

Nick H. hat gesagt.:
			
		

> schuld war die neue PHP Version
> dort ist standardmäßig Register_Globals off!



Ist das nicht schon seit 4.2 so?


----------



## Nick H. (3. Jul 2005)

Sorry wie gesagt mein Server kommt in ein kommerzielles Projekt
in irgendeinem online Buch war auch einer
der sogar ziemlich gut ist
denn kann ich dir wenn du willst schicken
kann halt leider nur get
und kein php

>>Ich hab nen Plan
>>du schickst mir des GANZE (also alle Datein und so)
>>dann guck ich was falsch war und schick dir die daten zurüch
>>nätürlich mit einer Textdatei als anhang wo dann drinn steht >>was falsch war und was ich geändert hab

>>sag mal kannste mir mal die daten schicken ich programmier >>au schon sei tagen an meinem rum aber ich kriegs einfach >>nicht hin

also wolltest du mir eigentlich gar nicht helfen
sondern nur gucken was bei dir falsch ist ;-)

"vergib deinen Sündigern und auch dir werde vergeben" 

ich hab jetzt übrigens alle Umgebungsvariablen gesetzt
ausser eine
DOCUMENT_ROOT
die will den absoluten Pfad des Server (also der JAR Datei)
wie kann ich den bekommen
hab schon in runtime und System geguckt


----------



## Seven (4. Jul 2005)

kannste mir das trotzdem schicken?!
BITTE?!


----------



## Bleiglanz (4. Jul 2005)

> DOCUMENT_ROOT
> die will den absoluten Pfad des Server (also der JAR Datei)
> wie kann ich den bekommen
> hab schon in runtime und System geguckt


wieso sollte das der Pfad zur jar datei sein?

das ist ein völlig beliebiger ordner den du selber festlegst, gute php skripte würden den sowieso nie anrühren...

nimm /dev/null zur Sicherheit


----------



## Nick H. (4. Jul 2005)

äh? mein Server is doch ne Jar Datei
oder meinst du die wollen das ROOT Verzeichnis des Servers?


----------



## Bleiglanz (5. Jul 2005)

ist doch einfach nur ein standard-ordner, UNTERHALB von dem wo die webseiten liegen 

meistens egal wo der ist, wichtig ist aber, dass angreifer nicht durch

../../../etc/passwd

aus diesem ordner "aussteigen" können....


----------



## Nick H. (5. Jul 2005)

okay schreib ich halt irgendeinen Ordner rein
auch wenn ich den sinn nicht versteh...


----------



## Bleiglanz (5. Jul 2005)

angenommen jemand startet deinen server auf seinem rechner

und gibt dann

http://localhost/

ein -> was soll dann erscheinen????


----------



## Nick H. (5. Jul 2005)

index.html

hab ich auch so eingestellt


----------



## Bleiglanz (6. Jul 2005)

und wo liegt diese index.html?

in welchem order??

=> dieser ist dann DOCUMENT_ROOT


----------



## Nick H. (6. Jul 2005)

im gleichen Ordner wie der Server!


----------



## aquanox (6. Jul 2005)

Soweit ich das jetzt verstanden hab suchst du das Verzeichnis in dem Java beim Starten deines Servers standardmäßig läuft.

Den bekommst du über:

```
String dir = System.getProperty("user.dir");
```


----------



## Roar (6. Jul 2005)

Nick H. hat gesagt.:
			
		

> im gleichen Ordner wie der Server!


soll das heißen der client kann sich deinen server runterladen? haha  :autsch:  :applaus:  :shock:  :?  :wink:


----------



## aquanox (6. Jul 2005)

Roar hat gesagt.:
			
		

> Nick H. hat gesagt.:
> 
> 
> 
> ...



Wenn das ein normaler Webserver ist und er den Zugriff nach überall erlaubt dann ist wie Microsoft schon sagt: Alles möglich!


----------



## Nick H. (6. Jul 2005)

>>soll das heißen der client kann sich deinen server runterladen? haha autsch.gif applaus.gif icon_eek.gif icon_confused.gif icon_wink.gif

hey stimmt eigentlich dumm gelaufen
egal änder ich halt...


es gibt aber jetzt ein neues Problem:

ich hab jetzt den $_SERVER String fertig
der wird automatisch von PHP aus den Daten die reingehören erstellt
also HTTP_USER_AGENT usw.
die ich gesetzt habe

jetzt wollte ich den $_GET String machen
dieser wird logischerweiße nicht automatisch gesetzt
da PHP ja nicht wissen kann was rein muss
da ich die Daten für $_GET und $_POST
ja auf dem gleichen weg übergebe

aber wie setze ich jetzt $_GET?
das ist ja ein Array indem verschiedene Sachen unter ner anderen Variable stehen
also so kann man die dan abrufen:

$_GET[variablenname]

es kann natürlich mehrere Variablen dadrin geben

aber wie setze ich eine Umgebungsvariable als Array?
so was geht doch gar nicht oder?
aber wie soll ich die dann in PHP verfügbar machen?
irgendwie ergibt das für mich keinen Sinn...


----------



## Seven (7. Jul 2005)

Und das soll gehen???


----------



## Nick H. (8. Jul 2005)

das muss gehen

sonst würde PHP ja gar nicht funktionieren

aber irgendwo muss da ein Trick sein...


----------



## Bleiglanz (8. Jul 2005)

übergib sie einfach in der kommandozeile mit --args

und zwar immer als varname=varwert



http://php.benscom.com/manual/de/features.commandline.php


----------



## Nick H. (8. Jul 2005)

und wie soll das mit einem Array gehen?


----------



## Nick H. (9. Jul 2005)

okay in nem anderen Forum ham sie mir geholfen (auf php.de)
GET funkt jetzt auch komplet
aber POST daten muss man über stdin übergeben

aber wie geht das?
wie kann ich stdin mit Java ansprechen?


----------



## Roar (9. Jul 2005)

ja, guck dir mal Process#getInputStream() und so an.


----------



## Nick H. (9. Jul 2005)

oh ja stimmt
damit müsste das gehen
hatte noch keine Zeit in die doc zu schaun
sorry
meld mich dann wieder


----------



## Nick H. (9. Jul 2005)

funzt mal wieder gar nix
wenn ich ihm die Content_Length als Umgebungsvariable übergebe
probiert er ja so viele Bytes einzulesen wie ich gesagt hab
nur leider hängt sich das Teil dann auf

oderist die Anzahl der Bytes gar nicht die Anzahl der Zeichen?
wenn ja wo bekomm ich die her?


----------



## Nick H. (9. Jul 2005)

jetzt hängts sich schonmal nicht mehr auf
und ich kann das ganze normal über stdin übergeben
nur leider kann ich sie dann nicht mit $_POST[...] abrufen
php scheint nicht zu wissen was es damit machen soll
da ein Parameter fehlt
(wahrscheinlich REQUEST_METHOD da ich die nicht gesetzt hab da es sich dann aus mir unerfindlichen Gründen aufhängt)


----------



## Nick H. (10. Jul 2005)

hab jetzt mal n' PHP-Scrip geschrieben das alle Umgebungsvariablen vom Server Array abfragt

wenn hinter dem = nichts steht bedeutet das das dort eigentlich eine Fehlermeldung kam

unten hab ich dann noch die Erklärung zu den einzelnen Fehlern

vielleicht kann jemand von euch ja was damit anfangen...

http://cemoi.ce.funpic.de/Env.txt

habs in ne Textdatei getan da ich ja in mehreren Foren frage
ich hoffe jemand hat ne Idee...


----------

