• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1313
  • Last Modified:

Perl/CGI Premature end of script headers

Greetings!

I'm running a CentOS Linux system with the default apache install (apache 2) I have perl installed and the script I'm attempting to run works perfectly from the command line, but whenever I try to hit it from a browser, I get a 500 Internal server error. My error_log states "Premature end of script headers: test.pl"
 
The script was written with the linux command-line vi editor, so this is not a windows character issue. I've tried all kinds of verious permissions... none seem to work. I've tried several extensions, .cgi, .pl, etc. No effect. Here's a copy of the test.cgi script I'm trying to run:

--------------------------
#! /usr/bin/perl -w

$|++;

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

use CGI;
print "hello world!";
--------------------------

The only thing I can figure at this point is that it's an apache config problem, but I've read their documentation on that and have checked the things they mention. (Perl path - running the script both with perl in front of the script and without perl in front of the script, etc etc etc.)

I've run out of things to try. Can anyone here offer assistance on where to look next? The script is being run in a VirtualHost with a ScriptAlias for the CGI part.

I'd very much appreciate any suggestions! Thanks!
0
viviotech
Asked:
viviotech
  • 5
  • 3
  • 2
  • +1
1 Solution
 
TintinCommented:
When you run it from the command line, how are you doing it?

What happens if you try a CGI shell script, eg:

#!/bin/sh
cat <<EOF
Content-Type: text/html

<h1>Hello World</h1>
EOF
0
 
ahoffmannCommented:
how do you call the script in your browser?
have you configured a ScriptAlias in httpd.conf? Please post the corresponding line.
0
 
manav_mathurCommented:
As long as you are using CGI, why not do the entre stuff with it. Also, you are missing the body start and end tags, the head part is missing entirely.

#! /usr/bin/perl -w
$|++;
use CGI qw/:standard/;
print header,start_html ;
print "hello world!";
print end_html ;
0
[Webinar] Cloud and Mobile-First Strategy

Maybe you’ve fully adopted the cloud since the beginning. Or maybe you started with on-prem resources but are pursuing a “cloud and mobile first” strategy. Getting to that end state has its challenges. Discover how to build out a 100% cloud and mobile IT strategy in this webinar.

 
ahoffmannCommented:
Manav, even without any HTML tags it should never return "Premature end of script headers"

Another reason might be that the server is configured for NPH - none parsing header ..
0
 
viviotechAuthor Commented:
>When you run it from the command line, how are you doing it?

# perl -w test.pl
Content-type: text/html

hello world!

>What happens if you try a CGI shell script, eg:

The shell script also yields an internal server error.

From the error_log: "Premature end of script headers: test2.cgi" (I called the script you provided test2.cgi)

From # ll
-rwxr-xr-x    1 wol      wol            70 Apr 28 10:17 test2.cgi

Any other suggestions? Thanks for your help!
0
 
viviotechAuthor Commented:
>  how do you call the script in your browser?

I'm calling it from Mozilla 1.7 on a SuSE Linux 9.1 system. URL is something like this:

http://www.mysite.net/cgi-bin/test.pl

> have you configured a ScriptAlias in httpd.conf?

Yes.

> Please post the corresponding line.

<VirtualHost *:*> [ip omitted for privacy reasons]
SuexecUserGroup "#501" "#501"
ServerName mysite.net
ServerAlias www.mysite.net
DocumentRoot /home/wol/public_html
ErrorLog /home/wol/logs/error_log
CustomLog /home/wol/logs/access_log common
ScriptAlias /cgi-bin/ /home/wol/cgi-bin/
<Directory /home/wol/public_html>
Options Indexes IncludesNOEXEC FollowSymLinks
</Directory>
</VirtualHost>

Off the cuff, I don't see anything wrong with it personally.
0
 
viviotechAuthor Commented:
> Another reason might be that the server is configured for NPH - none parsing header ..

Is there any way that I can check this?

Thanks for your help guys, I really appreciate it!
0
 
ahoffmannCommented:
> From the error_log: "Premature end of script headers: test2.cgi" (I
and
> http://www.mysite.net/cgi-bin/test.pl

you should make a decission for either naming the script test.pl (with proper httpd.conf settings) or call it with its real name test2cgi
simple, isn't it?  ;-)
0
 
viviotechAuthor Commented:
Whoops. Sorry about that.

test.pl is the file with the code that I posted with the origional question.

test2.cgi is the shell script code that tintin asked me to try. Both code examples had the same problem with the same error message in the logs.

Sorry for being unclear. =(
0
 
TintinCommented:
Your entry:

SuexecUserGroup "#501" "#501"

looks wrong to me.

Usually, you specify the username and group, eg:

SuexecUserGroup wol users

Do you really want the SuexecUserGroup entry?
0
 
viviotechAuthor Commented:
Commenting out the Suexec entry, restarting apache, and hitting the scripts again with a browser made the problem go away. So now I just need to figure out what I *really* need for those entries and I should be good to go.

Thanks for pointing me in the right direction tintin!
0

Featured Post

New feature and membership benefit!

New feature! Upgrade and increase expert visibility of your issues with Priority Questions.

  • 5
  • 3
  • 2
  • +1
Tackle projects and never again get stuck behind a technical roadblock.
Join Now