Hallo zusammen,
ich habe ein CGI-Programm geschrieben, welches die Methode POST auswertet.
Im Prinzip habe das Beispielprogramm aus dem FREE-PASCAL-Buch der Herren Van
Canneyt und Klämpfl abgetippt und ein paar kleine Erweiterungen
hinzugefügt.
Nun zum Problem:
Das Programm schreibt naturgemäß nur in die Standardausgabe. Es will mir
einfach nicht gelingen, einen Teil der Daten aus dem Programm irgendwie
anders auszugeben.
Das Programm soll eine Eingabe an meine Bilderdatenbank schicken, (Ein
Parser wertet alles aus). Die Datenbankausgabe wird in eine Datei
geschrieben, die wiederrum in mein CGI-Programm eingelesen wird (Lesen aus
Datei klappt).
Gibt es doch eine Möglichkeit zum Schreiben/Senden der Daten?
mit ipc (msgtool.pp) habe ich auch schon experimentiert. Das greift das UNIT
aber auch auf das Dateisystem zu (key := Ftok('.',ord('M')). Das hat mir
nicht weitergeholfen. Ich habe mich aber nicht so sehr vertieft.
Wie weiter? Eigentlich mach ich ja nichts Neuartiges.
An den Apache-Einstellungen habe ich nichts gemacht. Nur unter SuseLinux 9.2
eingeschaltet.
Vielen Dank
Jan-Rene
Es folgt der Quelltext, der noch ziemlich Roh ist (Die 1000 Felder brauch
ich zum Beispiel gar nicht, aber das Prinzip soll ja erst mal klappen).
ich habe ein CGI-Programm geschrieben, welches die Methode POST auswertet.
Im Prinzip habe das Beispielprogramm aus dem FREE-PASCAL-Buch der Herren Van
Canneyt und Klämpfl abgetippt und ein paar kleine Erweiterungen
hinzugefügt.
Nun zum Problem:
Das Programm schreibt naturgemäß nur in die Standardausgabe. Es will mir
einfach nicht gelingen, einen Teil der Daten aus dem Programm irgendwie
anders auszugeben.
Das Programm soll eine Eingabe an meine Bilderdatenbank schicken, (Ein
Parser wertet alles aus). Die Datenbankausgabe wird in eine Datei
geschrieben, die wiederrum in mein CGI-Programm eingelesen wird (Lesen aus
Datei klappt).
Gibt es doch eine Möglichkeit zum Schreiben/Senden der Daten?
mit ipc (msgtool.pp) habe ich auch schon experimentiert. Das greift das UNIT
aber auch auf das Dateisystem zu (key := Ftok('.',ord('M')). Das hat mir
nicht weitergeholfen. Ich habe mich aber nicht so sehr vertieft.

Wie weiter? Eigentlich mach ich ja nichts Neuartiges.
An den Apache-Einstellungen habe ich nichts gemacht. Nur unter SuseLinux 9.2
eingeschaltet.
Vielen Dank
Jan-Rene
Es folgt der Quelltext, der noch ziemlich Roh ist (Die 1000 Felder brauch
ich zum Beispiel gar nicht, aber das Prinzip soll ja erst mal klappen).
Code:
uses DOS, Sysutils, oldLinux;
const MaxData = 1000;
type DataRec = Record
name,
value : String;
end;
var Data : Array [1..MaxData] of DataRec;
i, j, NrData : LongInt;
c : Char;
literal, aname : Boolean;
f : Text;
s : String;
begin
(*abgetippt und leicht verändert*)
Writeln('Content-type: text/html');
Writeln;
if GetEnv('REQUEST_METHOD')<>'POST' then begin
Writeln('POST erwartet!'); halt(1); end;
if GetEnv('CONTENT_TYPE')<>'application/x-www-form-urlencoded' Then begin
Writeln('application/x-www-form-urlencoded erwartet!');
halt(1);
end;
NrData :=1;
aname:=True;
while Not Eof(input) do begin
literal := False;
read(c);
if c='\' Then begin
literal := True;
read(c);
end;
if literal or ((c<>'=') and (c<>'&')) Then begin
with data[nrData] do begin
if aname then name := name + c
Else value := value + c;
end;
end else begin
if c='&' Then begin
inc(nrData);
aname:=True;
end Else aname := False;
end;
end;
Writeln('<p>');
for i:= 1 to NrData do begin
if length(data[i].value)>0 Then
for j:=1 to length(data[i].value) do
// gleich die Leerzeichen wiederherstellen
if data[i].value[j]='+' Then data[i].value[j]:=' ' ;
Writeln(data[i].value);
end;
if NrData=1 Then Writeln(' ');
Writeln('</p><hr>');
(*EndOF abgetippt*)
(* hier ist der Knackpunkt, ich will auf die Festplatte des
Servers schreiben *)
assign (f,'test'); rewrite(f);
Writeln(f,'PROBLEME ?');close(f);
//Warten bis die Generierung der Ausgabedatei abgeschlossen ist
repeat until fileExists('/home/rene/jrabd.dynamic.cgi.free');
//Einlesen der Daten und anzeigen
assign(f,'/home/rene/jrabd.dynamic.cgi');
reset(f);
while not eof(f) do begin
readln(f,s);
Writeln(s);
end;
close(f);
if Deletefile('/home/rene/jrabd.dynamic.cgi.free') Then;
//neues Aufrufen des Programmes ermöglichen
Writeln('Formulardaten...');
end.