Hallo,
ich gehöre zu den wenigen, die cgi in ansi-c schreiben.
Na, so wenige sind das gar nicht ;-)
ich habe ein problem mit type="file".
nach meinem verständniss müste :
************************************************************
<head>
Hast Du <html> nur vergessen hier zu listen?
<META HTTP-EQUIV="Content-Type" content="text/html; charset=iso-8859-1">
<title>kundeand</title>
Dito </head>?
<body BGCOLOR="#FFFFCC" LINK="#0000AA" ALINK="#FF0000">
<h1>Logo für kunde : 00 , AMV</h1>
<form action="/cgi-bin/smq/kunden/kunden_jpg_upl.exe"
Iiih, Windows ;-)
enctype="multipart/form-data" method="post">
Wie sieht denn die Anfrage an den Server genau aus?
<p>
Wählen Sie eine Bild-Datei (jpg, gif) bis 100 kb von Ihrem Rechner aus:<br>
<input name="Datei" type="file" size="50" maxlength="100000">
(100000 sind keine 100kb und hat auch sonst wenig damit zu tun ;-)
</p>
<input type="Submit" name="ok" value="Datei Senden">
</form>
</body>
</html>
*************************************************************
die ausgewählte datei in stdin schreiben und das cgi:
*************************************************************
main()
Hey, ANSI-C ist das nicht!
int main(void)
{
text *qu;
text *qu2;
int buchst;
char fi[10000];
Das sind nur 10.000 Bytes. Fehlt eine Null.
int i=0;
print_header("kundeand");
Achso, hier kommt der Rest, sorry. Aber der </head> fehlt trotzdem ;-)
qu=getenv("REQUEST_METHOD");
qu2=getenv("CONTENT_LENGTH");
printf("%s<br>\n%s<br>\n",qu,qu2);
Was kommt denn hier raus?
while(1)
Overflow möglich, teste i auf <10000
{
buchst=getchar();
getchar() liest von STDIN. Allerdings werden die Daten von der Form per Argument übergeben. Du müßtest die dann auslesen. (was für eine Lib benutzt Du denn? Mit Version bitte). Schau doch einfach mal nach, was denn Deinem Progrämmchen beim Start beigegeben wird.
Also obenhin
int main(int argc, char **argv)
if (buchst==EOF || buchst=='\n') break;
fi[i]=buchst;
i++;
fi[i]='\0';
}
printf("%s",fi);
Und hierhin:
for(i=0;i<argc;i++){
printf("ARGV(%d) = %s\n",i, argv[i]);
}
Sollte die einzelnen Argumente beim Aufruf Deines Programmes rauschmeißen.
print_end();
return(0);
}
*****************************************************
das file ausgeben.
es macht aber nur undef-zeichen.
Je nach Art der CGI-Lib mußt Du dieselbe meist auch initialisieren.
Was sagt der Compiler beim Bauen?
Was für einen nimmst Du überhaupt?
Aber mal abgesehen von all dem. Meinst Du nicht, daß es in PHP oder ähnlichem bedeutend leichter ginge? In PHP z.b. sind das etwa 5 Zeilen einfachster Code um einen Datei auf dem Server zu empfangen und zu speichern ;-)
Wenn Du also nicht gerade _wirklich_ arge Probleme mit schwachbrüstiger Hardware hast, ist für den simplen Zweck C ein wenig "overdressed" ;-)
Also alleine um die Datei zu speichern, brauchst Du schon etwa 30 Zeilen, wenn Du das ordentlich machen willst.
Wenn Du jedoch das emfangene Bild im gleichem Programm weiterverabeiten willst, ist C vielleicht doch nicht so die schlechteste Wahl. Es wird aber verdammt nicht einfach!
so short
Christoph Zurnieden