From: Ken Coar
- $Revision: 1.70 $ ($Date: 1997/06/12 11:29:11 $)
+ $Revision: 1.71 $ ($Date: 1997/06/12 15:24:00 $)
The latest version of this FAQ is always available from the main
@@ -569,27 +569,48 @@
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 (aside from people not
- outputting the required headers at all) a result of an interaction
- with perl's output buffering. To make perl flush its buffers
- after each output statement, insert the following statements before your
- first
+ 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. To see if this is the case, try running the script standalone
+ from an interactive session, rather than as a script under the server.
+ If you get error messages, this is almost certainly the cause of the
+ "premature end of script headers" message.
+
+ The second most common cause of this (aside from people not
+ outputting the required headers at all) is a result of an interaction
+ with Perl's output buffering. To make Perl flush its buffers
+ after each output statement, insert the following statements around
+ the
Apache Server Frequently Asked Questions
print
or write
statement:
+ them.
+ print
or write
statements that send your
+ HTTP headers:
-
$cfh = select (STDOUT);
+
- $| = 1;
- select ($cfh);{
+ local ($oldbar) = $|;
+ $cfh = select (STDOUT);
+ $| = 1;
+ #
+ # print your HTTP headers here
+ #
+ $| = $oldbar;
+ select ($cfh);
+ }
This is generally only necessary when you are calling external
programs from your script that send output to stdout, or if there will
- be along delay between the time the headers are sent and the actual
+ be a long delay between the time the headers are sent and the actual
content starts being emitted. To maximise performance, you should
- turn buffering back on (with $| = 0
or the
- equivalent) after the statements that send the headers.
+ turn buffer-flushing back off (with $| = 0
or the
+ equivalent) after the statements that send the headers, as displayed
+ above.
+
If your script isn't written in Perl, do the equivalent thing for whatever language you are using (e.g., for C, call