2009-05-26 7 views
0

Ich habe ein seltsames Problem, vielleicht etwas mit Apache mehr als Perl zu tun. In meinem Code, wenn ich schreibe:Warum wird mein CGI-Header als Teil des Körpers gedruckt?

print "content-type: text/html\n\n"; 

es druckt das zusammen mit dem Code. Aber wenn ich tippe:

$c = new CGI; $c->header(); 

es funktioniert gut und zeigt die HTML gerenderten Ausgabe.

Was könnte das Problem sein?

Danke

+0

Reduzieren Sie Ihr Programm auf das kleinste Beispiel, das das Problem zeigt, und zeigen Sie uns das dann. Es gibt so viel, dass es so weitergehen könnte, dass ein paar Zeilen nicht helfen können. :) –

Antwort

1

Denken Sie daran, gibt HTTP RFC dass

\r\n 

für Zeile Trennzeichen verwendet wird, nicht

\n 

so dass Sie wollen

print "Content-Type: text/html\r\n\r\n"; 

Stattdessen emittiert werden.

Sie sollten nur verwenden, um dies für Sie zu tun.

Beachten Sie auch, dass ich Camel-Case anstelle von Kleinbuchstaben verwendet habe. Obwohl beide funktionieren sollten, ist das Camel-Case die Notation, die in der Spezifikation verwendet wird, so dass es bevorzugt und wahrscheinlicher ist, an seltsamen UAs zu arbeiten.

2

Ist der "Content-Type: text/html" die erste Sache, die Ausgabe ist? Verwenden Sie wget oder ähnliches, um die tatsächliche Ausgabe zu überprüfen. traue deinen Augen oder der Quelle des Browsers nicht.

Beachten Sie auch, dass CGI unter mod_perl die Methode send_cgi_header der Anfrage aufruft, anstatt nur die Header zu drucken.

Ist es möglich, dass Sie CGI-Header() an mehreren Stellen verwenden? Das ist zwar harmlos, aber das Ersetzen eines einzigen header() - Aufrufs mit explizitem Ausdruck des Headers würde die Ergebnisse liefern, die Sie sehen.

+0

ja der gleiche Code funktioniert mit Verwendung cgi. also das ist seltsam :( –

+0

@Alec Smart: dieser Kommentar scheint keine Antwort auf das, was ich gesagt habe ?? – ysth