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 [EMAIL PROTECTED] *** http://www.dontUthink.com/ volunteer to document your experience for next week's newbies -- http://www.eGroups.com/messages/newbieDoc