Archiv verlassen und diese Seite im Standarddesign anzeigen : Perl Premature end of script headers
Tach.
ich wollte mal ein wenig mit perl experimentieren. Hab als Workstation SuSE 7.2 mit perl, Apache und mod_perl
also mal ein tutorial gelesen und folgendes script als test.pl / test.cgi in /usr/local/httpd/cgi-bin gespeichert
#!/bin/perl
print "Content-Type:text/html\n\n";
print "hello";
wenn ihc nun aber http://127.0.0.1/cgi-bin/test.pl aufrufe, kommt nur Fehler
500 Internal server error....
wenn ich das script in der console mit
perl test2.pl
ausführe, funzt es einwandfrei.
was kann da der fehler sein????
thx. z. :(
du musst es als cgi speichern.
oder du must den apache auch auf pl konfiguieren.
aber nimm lieber cgi.
immernoch dasselbe.
in der error log steht
[Thu Jan 3 19:45:50 2002] [error] (13)Permission denied: exec of /usr/local/httpd/cgi-bin/test2.cgi failed
[Thu Jan 3 19:45:50 2002] [error] [client 127.0.0.1] Premature end of script headers: /usr/local/httpd/cgi-bin/test2.cgi
woanders hab ich dann gelesen, man soll chmod auf 755 machen, das hat aber auch nix geholfen :(
Stehen die Rechte auf 755 ??? Darf in dem Verzeichnis in dem Du das Script gepeichert hast CGI ausgeführt werden ?
Normalerweise ist der Pfad /usr/bin/perl oder ist das bei SuSE anders ????
HTH
in der konsole kann man die scripte einwandfrei ausführen.
ich will die aber im web verwenden, und nicht nur inner konsole :(
und ich hab den chmod, wie schon gesacht auf 755 gemacht. dann kommt aber immernoch
500 Internal server errror
und in der error_log steht dann die fehlermeldung mit dem premature:( :(
sticky bit
04-01-2002, 13:58
Versuch es mal in der Konsole ohne perl auszuführen, also statt perl skript.pl nur skript.pl, ich tipp ja nämlich auch auf die falsche Shebang...
Oh, und wenns sies nicht ist, dann probier mal das
print "Content-Type: text/html\n\n";
mit einem Space nach dem Doppelpunkt!!!
@bit
immernoch dasselbe prob :(:(
sticky bit
05-01-2002, 17:40
Dan liegts vielleicht an den Apache Einstellungen? Ist das ScriptAlias korrekt, hat dir cgi-bin Ausführungsrechte?
also in der httpd.conf stehen folgende einträge:
#
# If mod_perl is activated, load configuration information
#
<IfModule mod_perl.c>
Perlrequire /usr/include/apache/modules/perl/startup.perl
PerlModule Apache::Registry
#
# set Apache::Registry Mode for /perl Alias
#
<Location /perl>
SetHandler perl-script
PerlHandler Apache::Registry
Options ExecCGI
PerlSendHeader On
</Location>
#
# set Apache::PerlRun Mode for /cgi-perl Alias
#
<Location /cgi-perl>
SetHandler perl-script
PerlHandler Apache::PerlRun
Options ExecCGI
PerlSendHeader On
</Location>
</IfModule>
#
# Aliases: Add here as many aliases as you need (with no limit). The format is
# Alias fakename realname
#
<IfModule mod_alias.c>
#
# Note that if you include a trailing / on fakename then the server will
# require it to be present in the URL. So "/icons" isn't aliased in this
# example, only "/icons/"..
#
Alias /icons/ "/usr/local/httpd/icons/"
<Directory "/usr/local/httpd/icons">
Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>
#
# ScriptAlias: This controls which directories contain server scripts.
# ScriptAliases are essentially the same as Aliases, except that
# documents in the realname directory are treated as applications and
# run by the server when requested rather than as documents sent to the client.
# The same rules about trailing "/" apply to ScriptAlias directives as to
# Alias.
#
ScriptAlias /cgi-bin/ "/usr/local/httpd/cgi-bin/"
<IfModule mod_perl.c>
# Provide two aliases to the same cgi-bin directory,
# to see the effects of the 2 different mod_perl modes.
# for Apache::Registry Mode
ScriptAlias /perl/ "/usr/local/httpd/cgi-bin/"
# for Apache::Perlrun Mode
ScriptAlias /cgi-perl/ "/usr/local/httpd/cgi-bin/"
</IfModule>
#
# "/usr/local/httpd/cgi-bin" should be changed to whatever your ScriptAliased
# CGI directory exists, if you have that configured.
#
<Directory "/usr/local/httpd/cgi-bin">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
</IfModule>
# End of aliases.
#
# set /cgi-bin for CGI execution
#
<Location /cgi-bin>
AllowOverride None
Options +ExecCGI -Includes
SetHandler cgi-script
</Location>
und nu?
Um Apache-CGI zum Laufen zu bewegen, muessen folgende Einstellungen in der httpd.conf vorgenommen werden:
-----------------------------
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
Action application/x-httpd-cgi "/usr/bin/perl"
<Directory "/var/www/cgi-bin\">
Options ExecCGI Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
Allow from all
AllowOverride None
</Directory>
AddHandler cgi-script .cgi .pl
-----------------------------
Versuche anschliessend mal nach dem
print "Content-type: text/html", "\n\n";
drei mal Enter zu drücken (also drei Absätze einfügen).
Diese Einstellungen haben bei mir funktioniert.
@wd, hab alles so geändert, wie du gesacht hast, und es kommt immernoch internal server error :(
Also wenn da ein Premature End of Script Headers kommt dann is mit dem apache schon mal alles ok. Der pfad zu Perl stimmt auch sonst käme ein InternalServer Error. Wie stehen denn die Rechte auf dem Verzeichnis cgi-bin ? Versuch mal 755 (funktioniert jedenfalls bei mir so).
Habs eben mal gecheckt.... dann kommt nur forbidden.....
also das isses dann wohl auch nich :(
in der regel gibt es zwei gründe für "premature end ....":
1. die datei ist fehlerhaft (kann ja ausgeschlossen werden)
2. die datei gibt VOR dem header bereits zeichen zurück, und der header wird als ungültig angesehen.
letzteres ist sicher die ursache. diese ausgabe entsteht aber auch, wenn die datei noch windows-zeilenumbrüche enthält.
wie hast du denn die test.pl erstellt? mit windows? wenn ja, musst du unbedingt die datei via ascii-mode im ftp-programm übertragen und besser noch dein editor so einstellen, dass er die datei mit unix-zeilenumbrüchen abspeichert und nicht mit den doofen win-dingern. (geht aber nur bei guten editoren)
poste doch einfach mal dein script!!!
(wenn du deine datei mit vi {vi test.pl} öffnest und dort ein ^M findest ist der winzeilenumbruch drin...)
oliver
also ich hatte die datei mit quanta++ unter linux erstellt. und dann mit cp kopiert, dann rechte vergeben (chmod 755 test.pl), und dann mit via browser aufgerufen.
ich bekomme dann immernoch nen 500er :(
und in der apache error_log steht halt das mit dem premature...
axo:
das mit vi hab ich gemacht und da war kein win.zeilenumbruch drinn
script:
#!/usr/bin/perl -w
print("warum geht das nicht?");
wenn ich das script mit
perl ./test.pl
aufrufe wird mir in der konsole schön brav der text ausgegeben... nur via browser nicht :(
hättest du mal gleich dein skript gepostet:
#!/usr/bin/perl -w
print "Content-type: text/html\n\n";
# damit der browser weiss, was für daten ausgegeben werden
print("warum geht das nicht?<br>");
print "<h1>Weil du den HTML-Header vergessen hast!!!!</h1>";
*grml*
das hatte weiter oben schonmal jemand gepostet, ich habs getestet und es ging nicht...
nun geht aber :) :) :)
thx.
btw:
ich hatte das script aus nem Tutorial und bin davon ausgegangen, dass es dann wenigstens funzen sollte....
das hat man nun davon, wenn man nen Tutorial liest ;)
nun, man sollte nur wissen, ob man sich in bereich für shell-skripte (ohne header) oder im cgi-bereich (mit header) befindet...
viel spass mit perl ;)
oliver
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.