Halihallo Kay
GET /formular.html HTTP/1.1
[...]
Das bedeutet doch, das der Klient (IE) die Datei formular.html aus dem Stammverzeichnis (welches das auch immer gerade ist) anfordert, oder?
Ja. Stammverzeichnis => DOCUMENT_ROOT Verzeichnis; wie du das auf das lokale Dateisystem
abbildest, ist dir überlassen.
Und nun lese ich also die gewünschte Datei von meiner Platte ein und schicke sie per SendStream an den Klient zurück ... bis hierher richtig?
Jein. HTTP sieht einen Response-Header vor, der durch 0D0A (zwei Bytes, hex) von der
Datei getrennt wird.
Code:
ClientSocket.SendStream(TFileStream.Create(Datei, fmOpenRead or fmShareDenyWrite));
Zuerst muss noch der Response-Header zum Client gesendet werden:
Content-Type: text/html
Status: 200 OK
Last-Modified: ...
...
[zwei Leerzeilen]
[und jetzt darfst du die Datei senden...]
GET /test.php HTTP/1.1
[...]
Content-Length: 27
Text1=Test&Button1=Absenden
Nun führe ich den PHP-Interpreter aus und lenke die Ausgabe in eine TEMP-Datei um. Die schicke ich dann wieder mit SendStream an den Klient. Gibt's noch eine bessere Variante?
Ich nehme an, dass der Output von PHP irgendwie direkt über Delphi eingelesen werden
kann? - Dann bräuchtest du keine temporäre Dateien; hast jedoch dann den Nachteil,
dass du die Ausgabe des Scriptes im Speicher hälst, was bei grossen Scripten
problematisch werden könnte.
Und wie erreiche ich es, dass die gesendeten Daten als Parameter an dem Skript hängen, wenn die URL im IE angezeigt wird?
Damit hat dein Webserver absolut nix zu tun. Was der Client anzeigt ist einzig und allein
seine Aufgabe, das kannst du nicht steuern. Versuch mal <form action="get">, du wirst
dort wohl Post stehen haben.
---
Ich würde dir empfehlen, die RCF's durchzulesen; du solltest dich an die Standards
halten, ansonsten verstehen dich die Clients nicht; und Standards zu HTTP stehen in
den RCF's, also google danach, falls du sie nicht kennst.
Viele Grüsse
Philipp