H-P Ortner: File-Upload in C

Beitrag lesen

Hallo Michael!

Ja, vollkommen richtig, ich kann am Webserver mehrere HTML-Seiten ablegen.  Da gibt es 2 Möglichkeiten, entweder der Webserver findet die Datei im Flash der Motorsteuerung oder er schaut in seinem C-Programm nach, ob er die Seite dynamisch generieren soll.

Um das besser zu verstehen hier mal kurz wie die steuerung gangbar gemacht wird und meiner Meinung nach funktioniert:

Meine Motorsteuerung wird in 2 Schritten programmiert.

  1. Ich schicke alle Dateien die für den Aufbau einer statischen HTML-Datei zuständig sind in den Flash der Steuerung.
  2. Ich schicke meinen kompeliertes C-File in die Steuerung. Das C-File entählt dabei meinen Webserver.

Kommt eine Anforderung des Webbrowsers an meine Motorsteuerung, dann prüft der Webserver der Motorsteuerung zuerst ob es so eine Datei im Flash gibt. Wenn ja wird diese Seite übertragen, wenn nein wird im Webserver geschaut, ob es sich hier um einen Dynamische Webseite handelt. Ist eine dynamische Webseite nicht vorhanden, dann schickt der Webserver eine Webseite mit einer Fehlermeldung heraus, mit dem Inhalt, dass die Seite nicht gefunden werden konnte. Wurde eine dynamische Seite gefunden, dann wird der für die Seite entsprechende C-Code abgearbeitet.

Die Überprüfung ob eine dynamische Seite vorhanden ist oder nicht wird in dem C-Programm über eine if-Anweisung realisiert:
if (!strcmp(url,"motorsteuerung3.html"))

Handelt es sich also um die dynamische Web-Seite wie im Beispiel motorsteuerung3.html, dann kann man nun im C-Programm programmieren was weiter passieren soll.
So ist hier das Erste was gewöhnlicherweise gemacht wird die Übergabe der CGI-Werte. Dies wird nun wieder mit einer C-Funkton realisiert, die mir in meinem kleienn C-Web-Server mitgeliefert wurde:
r_get_cgi_param(url_and_args,"x_step_char",x_step_char);
Diese Funktion übergibt der Variablen x_step_char, welche vorher im C-Programm als Char deklariert wurde, den wert x_step_char über die CGI.  Nun kann ich den Wert x_step_char in meinem C-Programm weiter verarbeiten.

Um also auf deine Frage zurückzukommen, wie ich denn die CGI Schnittstelle anspreche: Nun Mein Webserver hat eine Funktion, welche die CGI Schnittstelle darstellen soll, sprich die Übergabe der Werte an mein C-Programm übernimmt.

Heute bin ich dann mal dieser CGI-Funktion r_get_cgi_param nachgegangen, wo sie denn eigentlich ihre Werte herbekommt. Natürlich wieder von einer anderen Funktion, die die gesamten Werte des Browsers aufnimmt.

Ist das wirklich ein Programm oder erweiterst Du das Programm des Webservers?

Das was mein Webserver hier an Daten bekommt lautet:

POST /motorsteuerung4.html HTTP/1.1
Accept: /*
Accept-Language: de
Contnet-Type. Multipart/form-data; boundary=_______________7d31b3b10300152

Ich würde meinen, hier sieht man deutlich dass der Browser die Daten übergeben hat. Der Browser erhält ja auch keine Fehlermeldung - daher dürften die Daten vom Webserver angenommen worden sein.

Accept-Encoding: gzip, deflate
User-Agent:Mozilla\4.0 (compatible; MSIE 6.0; Windows NT 5.1)
Host()

Sind das wirklich alle Varaiblen? Ich vermisse hier insbesondere
CONTENT_LENGTH=
Es könnte eventeull sein, dass der Webserver CGI nicht wirklich unterstützt sondern nur einen Teil der Funktion zur Verfügung stellt.
Wie gesagt sollte hier Content_Length einen Wert haben und es sollte diese Anzahl an Zeichen dan von der Stadardeingabe gelesen werden können.
Für das Lesen von Daten aus der Standardeingabe waren in den Seiten die ich als Info angeführt habe ja einige Beispiele.
Versuche doch einfach einmal 10 Zeichen von der Standardeingabe zu lesen und in der Antwortseite auszugeben.

Viele Grüße
H-P Ortner