PHP Server - C++ Client
-
so wie ich dich verstehe, möchtest du folgendes machen:
selber einen client bauen, der eine anfrage an ein php skript irgendwo im world wide web auf einem server stellt und das zurückkommende html auffängt.
nun, also sowas wie einen browser.. ok, etwas abgespeckter, oder anders ausgerichtet vielleicht.
gut. du musst dich mit sockets auseinandersetzen (ein hervorragender artikel dazu befindet sich in diesem forum unten bei den artikelsammlungen)
nachdem du also einen socket hast, kannst du die anfrage stellen. das heißt: du rufst die php seite auf über http://... (port 80)
nun wird die seite auf dem server .. bevor sie zurückgesendet wird, von php interpretiert/compiliert, und zu html verwurstet und dir zurückgesendet.
ich bin mir unsicher, wo dein problem ist, weißt du nicht, wie php funktioniert? oder was sockets sind?
php wird in wikipedia sehr gut erklärt

-
Danke erstmal, aber du hast mich leider falsch verstanden

Also ich kann sowohl PHP (und nicht erst seit gestern) und auch mit Sockets kenn ich mich dank einem meiner Projekte recht gut (wenn auch nicht perfekt) aus. Ich will jetzt einen Client- und einen Serverprogramm basteln. Das Serverprogramm basiert auf PHP und der Client auf C++. Jetzt mein Problem: Um ein PHP-Skript zu starten, muss es aufgerufen werden. Da ich allerdings nicht voraussetzen will, dass der User immer erst den Browser aufmachen und eben auf die Seite gehen muss um das Skript starten. Deshalb frage ich mich jetzt, wie ich das Skript durch den Client starten lassen kann.
Wenn jetzt aber jemand meint, warum ich denn nicht einfach ein Server auf C++-Basis programmiere, dem muss ich leider sagen, dass ich keine .EXE-Dateien ausführen lassen kann.
Mfg Ominion
-
Also zum einen wird das Script dadurch ausgeführt, dass "jemand" es beim Server anfordert. Dabei weiss der Webserver anhand seiner Konfiguration, dass Du nicht den Inhalt der PHP-Datei haben möchtest, sondern (vereinfacht) das Resultat des Aufrufs "php.exe script.php". Du musst also beim Webserver die URL anfordern und das Ergebnis auswerten. Dies machst Du - genauso wie der Browser es machen würde - mit dem HTTP-Protokoll. Es folgt eine grobe Beschreibung des Vorgangs:
0. Das Script sei auf dem Server beispielhaft unter http://www.xyz.de/somewhere/script.php zu finden
1. Verbinden mit Server www.xyz.de auf Port yy (normalerweise 80)
2. Senden des Requests in der Form "GET /somewhere/script.php HTTP/1.1"
3. Senden der Header, einer pro Zeile in der Form "Host: www.xyz.de" (der Header "Host" ist in HTTP 1.1 verpflichtend, alle anderen optional)
4. Senden einer Leerzeile5. Daraufhin antwortet der Server mit einem Responsecode in der Form "HTTP/1.1 200 OK",
6. gefolgt von ein paar Headern wie oben,
7. gefolgt von einer Leerzeile,
8. gefolgt von dem Resultat des Aufrufs "php.exe script.php", wenn der Responsecode 200 war.War das was Du meintest?

-
Ich bin mir nicht sicher...
Wenn ich damit auch Daten an das PHP-Skript senden kann, welches diese dann auswertet? Aber ich glaube ja, wegen Punkt 2...
Also wenn du da ein Code Beispiel hast (habe mir das alles einfacher vorgestellt), wäre das hilfreich, da ich dazu nichts gefunden habe.Mfg Ominion
EDIT: Um das jetzt mal konkreter zu machen: Der Client soll das Skript aufrufen, welches sich dann mit dem Client verbindet. Dann soll ein reger Austausch von Daten stattfinden...
-
lach
nichts anderes habe ich gesagt.
schau dir doch einfach mal den artikel über sockets an, um erstmal einen einstieg zu finden.
einen regen austausch.. den musst du dann selber machen.. indem du weitere requests versendest.
so long.
ps: das beispiel mit dem browser war untermalung, damit dus verstehst.. du sollst einen analogen client selber bauen. also programmieren. .das willst du doch

pps: und hier zwei geeignete adressen zum schmöckern
http://www.c-plusplus.info/forum/viewtopic-var-t-is-169861.html
www.c-worker.ch
-
Ominion schrieb:
Also ich kann sowohl PHP (und nicht erst seit gestern) und auch mit Sockets kenn ich mich dank einem meiner Projekte recht gut (wenn auch nicht perfekt) aus.
Also ich glaube wiederholen muss ich mich nicht...
Danke für die Links, ich gucke sie mir mal an...
Mfg Ominion
-
mir geht es darum, dass du einen client baust, der http requests absetzt. und das willst du ja schließlich

-
ps: bei der auswertung musst du natürlich wissen, in welcher form das php skript die daten übermittelt bekommen möchte, per post oder get.
für post nimm das skript von jomoo und packe dir die post daten hinten dran
//...ins artikelskript einsetzen. //... string imPostHintenMit="deinevariable=inhaltdervariablen"; int len= imPostHintenMit.length(); ostringstream str1; str1 << len; string postLen=str1.str(); string request = "POST "; request += URL; request += " HTTP/1.1\n"; request += "Host: " + hostname + "\n"; request += "Referer: www\n"; request += "Content-type: application/x-www-form-urlencoded\n"; request += "Content-length: " + postLen; request += "\nConnection: close\n\n"; request += imPostHintenMit+"\n"; //hier weiter artikelskript ;)da du ja php kannst, weißt du, dass get immer an die url angehängt und post im körper mit der vorigen länge mitgesendet werden müssen.
die header sind dir bekannt.das mit in jomoos skript eingefügt reicht zum testen .. einen hin und her request zu schaffen ist etwas komplexer..
viel spaß
<edit>code formatiert
-
ok, danke. wenn was nicht klappt, melde ich mich nochmal.
Mfg Ominion
-
@elise: Eine kleine Korrektur noch: Zeilenschaltungen in HTTP sind immer CR-LF (also "\r\n"). Ich habe zwar noch keinen Server getroffen, der nicht auch nur ein LF versteht (ausser frühere Versionen meines eigenen Tntnet-servers), aber gemäß Standard dürfte er solche Requests ablehnen.
Tntnet
-
jep.
der standard ist strenger.
also noch einfügen ins exemplarische.