[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: more apache/perl problems, "premature end of script"



welcome to the club, you've been initiated.

On Mon, Nov 27, 2000 at 10:34:40AM -0600, Herbert Ho wrote:
> i downloaded cgi-lib.pl and placed it in the same directory as my
> script. (from cgi-lib.berkeley.edu) it runs fine on the cmdline (both
> my box and my university's server) 
> 
> the error i get in /var/log/apache/error.log is (without the time
> stamp):
> 
>    Premature end of script headers: /home/herb/public_html/init/login.pl
> 
> what changes have to be made to a stock apache config on potato for
> cgi/perl to work in the user public_html directories?

apache, when it runs a process that generates the stuff that'll
be sent out to a client's browser, checks the text for
completeness. this includes all the header fields, such as

	content-type: text/html
	connection: close
	date: 27 nov 2000
	accept-ranges: bytes

try this, now:

	telnet localhost 80 ^M
	GET / HTTP/1.1 ^M
	^M

<localhost> is whatever host your server's running on;
the ^M merely denotes end-of-line/enter on your part.

here's what you'll get back:

	HTTP/1.1 200 OK
	Date: yada-yada

that first line is the STATUS for the whole request,
which comes even before the header:value fields.

so try this in your script:

	#!/usr/bin/perl
	print "HTTP/1.1 200 OK\nContent-Type: text/html\n\n";
	print "<b>hello world</b><p>it worked!";

so what you're seeing is APACHE noticing that you
didn't specify a HTTP STATUS CODE.

from the perl.apache.org/guide/ website--

	If you take a basic CGI script like this: 

		print "Content-type: text/plain\r\n\r\n";
		print "Hello world";

	it wouldn't work, because the HTTP header will not be sent
	out. By default, mod_perl does not send any headers itself.
	You may wish to change this by adding 

		PerlSendHeader On

	in the Apache::Registry <Location> section of your
	configuration. Now, the response line and common headers
	will be sent as they are by mod_cgi. Just as with mod_cgi,
	PerlSendHeader will not send the MIME type and a terminating
	double newline. Your script must send that itself

the modperl guide (perl.apache.org/guide) offers a wealth of
info, once you know what you're looking for... :)

> the changes i've made so far:
> 
>    1) in access.conf (adding ExecCGI to the Options directive in the
>    DirectoryMatch directive for the public_html directories)
> 
>    2) in srm.conf (adding AddHandler cgi-script .pl .cgi)
> 
> ## my script works in /usr/lib/cgi-bin/ but not in the public_html
> directories. i've tried copying the Directory directive for
> /usr/lib/cgi-bin word for word to the public_html directive w/ no
> effect.

you need
	# something along the lines of...
	LoadModule userdir_module /usr/lib/apache/1.3/mod_userdir.so
	UserDir /home/*/public_html
	<DirectoryMatch ^/home/.*/public_html/cgi-bin>
		Options +ExecCGI
	</DirectoryMatch>
	UserDir disabled root
somewhere in your config, then.

> thanks for everyone's help so far. i'm gonna get this to
> work...somehow. =)

-- 
There are only two places in the world where time takes
precedence over the job to be done.  School and prison. 
					--William Glasser 

will@serensoft.com    ***    http://www.dontUthink.com/

volunteer to document your experience for next week's
newbies -- http://www.eGroups.com/messages/newbieDoc



Reply to: