Datenverkehr in CGI Progammen

jrx

Mitglied
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. :confused:

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('&nbsp;'); 
        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.
 
Hallo,
mir ist deine Frage nicht klar:
Das Programm schreibt naturgemäß nur in die Standardausgabe. Es will mir
einfach nicht gelingen, einen Teil der Daten aus dem Programm irgendwie
anders auszugeben.
Mit
Code:
        assign (f,'test'); rewrite(f);          
        Writeln(f,'PROBLEME ?');close(f);
schreibt du nicht mehr in die Standardausgabe, sondern in ein File. Die Standardausgabe ist der Bildschirm, welcher in deinem Source über
Code:
Writeln('</p><hr>');
angesprochen wird.
Schreib etwas genauer, was du machen möchtest, vielleicht kann ich dir dann helfen.
 
Hallo WieGehts

ich habe die Lösung im PHP Forum gefunden.
Natürlich was mit chmod

Ich glaube, ich mach die Verbindung zwischen Server und meinem Programm via PHP.

Deine Anmerkung:
Mein CGI-Programm sollte neben der Bildschirmausgabe auch in eine Datei schreiben, was es aber nicht gemacht hat.
An der Stelle "PROBLEME ?" sollte eigentlich eine Steuersequenz für meine Bilddatenbank stehen. (Suchen usw.)

Ich mache mit PHP weiter und habe auch ein paar Fragen...

Vielen Dank.
 

Neue Beiträge

Zurück