CGI auf Apache2 - "Premature end of script headers"
-
ich habe einen Webservice entwickelt, der in ein CGI auf Apache2 eingebettet ist. Der soll einfach nur in einer MySQL DB auf der gleichen lokalen Maschine einen kleinen Datensatz nachsehen und mir dann ein OK liefern, wenn dieser gefunden wurde. So weit klappt das auch (ohne den Apache zumindest), implementiere ich das Script, bekomme ich den o.g. Fehler.
Die Sprache, in der das CGI geschrieben wurde ist C++. Hat jemand Hinweise? Bei APache habe ich Antworten gesehen, die sich immer sehr auf Perl bezogen hatten, die halfen mir leider nicht weiter.
-
erste idee: was sendest du für einen header?
zweite idee: ein einfaches programm testen ohne db, nur mit richtigem header
-
Der Header sieht wie folgt aus:
<?xml version="1.0" encoding="UTF-8"?><SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:lp="longplay">
Ich sehe da keinen Fehler- ausserdem wird der vom SOAP Toolkit (gSOAP http://www.cs.fsu.edu/~engelen/soap.html) durch den integrierten Serialisierer erzeugt- das funktioniert eigentlich so weit.
Wenn ich einen Test CGI damit mache, die auf keine DB und gar nichts zugreifen will, sondern stumpf mit A oder B antwortet, dann klappt auch alles.
Nun habe ich mich bei Apache.org mal schlau gemacht, was der Fehler bedeutet:
It means just what it says: the server was expecting a complete set of HTTP headers (one or more followed by a blank line), and didn't get them.The most common cause of this problem is the script dying before sending the complete set of headers, or possibly any at all, to the server.(Quelle: http://httpd.apache.org/docs/misc/FAQ-F.html#premature-script-headers)
Da werd ich nur nicht so ganz schlau draus, zumindest nicht aus der tieferen Bedeutung des zweiten Satzes. Das CGI überträgt die Header nicht richtig?? Hä?
Oder hat der Standarduser, unter dem der Server läuft nicht die erforderlichen rechte für den Zugriff auf die DB?
Aber der meldet sich da doch per
mysql_real_connect(db,HOST,USER,PASS,DB,0,0,0);
bei der Datenbank an und so hatte ich in anderen Fällen (ohne Apache/ Webserver auf dem das laufen soll) nie Probleme, egal mit welchem Account ich gerade das entspr. Programm ausgeführt hatte.
-
bitte teste doch zuerst mal ein einfaches skript.
sowas zum bleistift:
#include <stdio.h> int main(){ printf ("Content-type:text/html\n\n"); printf ("<html><body>hello</body></html>"); return 0; }
... nicht gleich so eine bombe..
der header ist die zeile mit dem content-type (die \n sind zwingend)
je nachdem, was du sendest, in diesem fall text.wenn das funzt, weißt du zumindest, dass es nicht an cgi pfaden und der apache http.conf einstellung liegt, sondern wirklich an deinem skript und dem wahrscheinlichen fehlen des obigen headers.