Providerwechsel und jetzt Premature end of script headers??
Gerd Schneider
- cgi
Guten Tag Forum,
hallo Self-html,
erst einmal ein Kompliment für dieses Klasseforum,
ich bin neu hier und über eine Heft-CD auf dieses
Forum gekommen. :-)
Ich habe seit Tagen und Nächten ein grosses Problem
mit der CGI und der dazugehörigen Fehlermeldung und
würde mich sehr freuen, wenn mich da bitte mal jemand
aufklären könnte.
"Premature end of script headers" - das Stichwort. :-(
Also, vorher gingen die diversen CGI wunderbar, jetzt
hab ich den Provider gewechselt. Das heisst natürlich,
dass die *.pl-Dateien entsprechend auf meinem Server
beim neuen Provider angepasst werden müssen. Der neue
Provider hat sein Apache eben anders installiert,
soweit gut kein Problem und der Provider teilte mir
aufgrund meiner Rückfrage folgendes mit:
#!/usr/bin/perl
/usr/local/apache/vhosts/domainname.xyz/cgi-bin/blafaseldirthema/
Ich habe das korrekt uebertragen:
dateiname.pl
-------------------------------
#!/usr/bin/perl -w
.
..
$basedir = "/usr/local/apache/vhosts/domainname.xyz/cgi-bin/blafaseldirthema/";
..
.
-------------------------------
Und trotzdem geht das Teil dateiname.pl nicht, obwohl
eben alles so angepasst ist. Auch CHMOD stimmt soweit
alles. Es kommt folgende Fehlermeldung beim Anlicken
von dem Button Absenden:
-------------------------------
500 Internal Server Error
Internal Server Error
The server encountered an internal error or misconfiguration and was
unable to complete your request.Please contact the server administrator,...
-------------------------------
Im error.log steht dann folgendes:
-------------------------------
[Sat Sep 8 01:46:39 2000] [error] [client XXX.XXX.XXX.XXX] Premature end of script headers: /usr/local/apache/vhosts/meinedomaine.xyz/cgi-bin/blafaseldirthema/dateiname.pl
-------------------------------
CHMOD stimmen, HTML stimmt, nur immer wieder diese
"Premature end of script headers"-Fehlermeldung. Hilfe! ;-(
Hat jemand bitte einen Rat oder Vorschlag für
mich, was ich tun soll und woher diese Fehlermeldung
herkommt? Ich habe doch bloss den Provider gewechsel
und CGI ist nach wie vor aktiviert. Auch mit *.cgi
umbenennen (und Anpassen) habe ich es probiert,
"Premature end of script headers"-Fehler. :-(((
Danke!
Tchau
Gerd
Hi,
$basedir = "/usr/local/apache/vhosts/domainname.xyz/cgi-bin/blafaseldirthema/";
eine Variablenzuweisung erzeugt noch keinen Fehler. Wo wird dies verwendet, was wird _dort_ für ein Fehler zurückgegeben?
Übrigens: Herzlichen Glückwunsch zur Verwendung von perl -w. Hättest Du das Script damit mal testweise an der Kommandozeile ausgeführt, hättest Du bei der Zuweisung von $basedir ohne "my" eine Warnung bekommen. Vielleicht ist diese ja schon Dein Fehler?
Ansonsten:
use CGI::Carp 'fatalsToBrowser';
direkt nach der Shebang-Zeile. Vermutlich werden irgendwo anders noch Systemkommandos o.ä. aufgerufen, oder irgendeine Rechte- oder User-Verteilung stimmt nicht.
Cheatah
Hi Cheatah,
danke für Deine rasche Antwort, ist ja klasse hier! :-)
$basedir = "/usr/local/apache/vhosts/domainname.xyz/cgi-bin/blafaseldirthema/";
eine Variablenzuweisung erzeugt noch keinen Fehler. Wo wird dies verwendet,
Eines für das Gästebuch, eines für Feedback, eines für
Forum, eines für Anfragungen, usw., ganz normale
Formulare zum Ausfüllen und Absenden; und all das Zeugs
ging auch wunderbar. Seitdem ich beim neuen Provider
bin, geht das eben nicht mehr. Habe all diese .pl-Teile
auch schon auf anderen Apaches ausprobiert, klappt
einwandfrei, nur hier auf diesem neuen Server nicht.
was wird _dort_ für ein Fehler zurückgegeben?
Nach dem Absenden auf eines der vorhin genannten
Formulare kommt eben immer nur das für den Surfer
sichtbare:
500 Internal Server Error
Internal Server Error
The server encountered an internal error or misconfiguration and was
unable to complete your request.Please contact the server administrator, xxxxxx@XXX.net and inform
them of the time the error occurred, and anything you might have done
that may have caused the error.More information about this error may be available in the server error
log.
Apache/1.3.12 Ben-SSL/1.38 Server at www.XXX.net Port 80
und nur für mich sichtbar per FTP der Zugang
zum error.log und dort steht dann drin:
------------------
[Sat Sep 9 05:03:56 2000] [error] [client XXX.XXX.XXX.XXX] Premature end of script headers: /usr/local/apache/vhosts/meinedomaine.yz/cgi-bin/blafaseldirthema/dateiname.pl
------------------
?? <verzweifel>
Übrigens: Herzlichen Glückwunsch zur Verwendung von perl -w.
??
Hättest Du das Script damit mal testweise an der Kommandozeile ausgeführt, hättest Du bei der Zuweisung von $basedir ohne "my" eine Warnung bekommen. Vielleicht ist diese ja schon Dein Fehler?
Also gut, ich habe das jetzt gerade vorhin - so wie Du
sagst - ohne dem -w gemacht:
------------------
#!/usr/bin/perl
------------------
Und es kommt immer noch der gleiche 500 Error-Mist mit
LOG-File
------------------
[Sat Sep 9 05:18:12 2000] [error] [client XXX.XXX.XXX.XXX] Premature end of script headers: /usr/local/apache/vhosts/meinedomaine.yz/cgi-bin/blafaseldirthema/dateiname.pl
------------------
?? Was nun?
Ob
#!/usr/bin/perl
oder
#!/usr/bin/perl -w
machen beide gleiche Fehlermeldungen 500-ERROR, egal
bei welchem .pl-Script, "Premature end of script headers" :-(
Ansonsten:
use CGI::Carp 'fatalsToBrowser';direkt nach der Shebang-Zeile.
Gut, machen wir das auch wie Du sagst:
------------------
#!/usr/bin/perl
use CGI::Carp 'fatalsToBrowser';
$basedir = "/usr/local/apache/vhosts/meindomaine.xy/blafaseldirthema/";
$baseurl = "http://www.meinedomaine.xy/blafaseldirthema";
$cgi_url = "http://www.....
------------------
Was passiert? Das gleiche immer noch mit:
------------------
500 Internal Server Error
Internal Server Error
The server encountered an internal error or misconfiguration and was
unable to complete your request.Please contact the server administrator,....
------------------
und im LOG file wieder, bzw. immer noch auch hier mit
diesem bloeden "Premature end of script headers". :-(
Vermutlich werden irgendwo anders noch Systemkommandos o.ä. aufgerufen,....
Woher soll ich das wissen? Das ist ein ganz normaler
Apache mit CGI. Bei anderen Apaches auf anderen Hosts
und beim früheren Provider ging das ja alles auch.
Jetzt plötzlich nicht mehr. Das kann doch eigentlich
gar nicht an mir liegen, oder?
oder irgendeine Rechte- oder User-Verteilung stimmt nicht.
Das habe ich auch anfangs gemeint, Provider sagt aber
ganz normal, dass die CGI drauf ist und die
#!/usr/bin/perl
bleibt ganz normal (es gibt auch /usr/local/bin/perl
bei anderen Hosts, wo das Teil nur so funzt)
und die Variablen an den Server anzupassen sind und
das wäre eben nur die Pfadanpassung wie schon gepostet
mit dem neuen Pfad (wie vom Provider angegeben):
------------------
$basedir = "/usr/local/apache/vhosts/meindomaine.xy/blafaseldirthema/";
------------------
Stelle Dir einfach vor, diese Scripte sind alle auch bei
mehreren Providers auf mehreren verschiedenen Hosts
wunderbar gelaufen, nur hier bei diesem "System" gehts nicht,
obwohl CGI drauf ist und das auch bei einer manuellen
URL-Eingabe einer http://www.meinedomaine.xy/blafaseldirthema/dateiname.pl
reagiert, sonst gäbe es ja eine 404-Notfound Errormeldung und
das tut der nicht, sondern macht brav 500 Servererror rein. :-(
Was mache ich denn jetzt? Wie kann ich die "Rechte- oder
Userverteilung" feststellen? CGI ist ja aktiviert.
Vielleicht hilft Dir noch diese Info:
Login per FTP:
/cgi-bin
/httpdocs
/logs
Wie man sieht, ist /cgi-bin praktisch hinter dem Server und
dort befinden sich auch die Unterverzeichnisse und Dateiname.pl
/cgi-bin/blafaseldirthema/dateiname.pl
/httpdocs/blafaselthema/*.*
HTML-Source FORM Action ist auch brav
<FORM ACTION = "http://www.meindomaine.xy/cgi-bin/blafaseldirthema/dateiname.pl" METHOD = "POST">
Hab mal vorhin auf die Schnelle das WWW-Board von Matt Wright
ebenfalls reingeschmissen, auch der macht diesen 500 ERROR
mit "Premature end of script headers". Kann doch nicht sein,
dass ein solch einfaches WWW-Board bei Dir laeuft und bei mir
macht das Teil 500 ERROR "Premature end of script headers"?
Es wäre toll, wenn Du doch bitte etwas dazu sagen könntest, ich
sitze jetzt auch schon wieder fast die ganze Nacht nur an diesem
blöden CGI-Fehler "Premature end of script headers". ;-(
Danke! :-)
Tchau
Gerd mit 18 grauen Haaren mehr...
Hi,
$basedir = "/usr/local/apache/vhosts/domainname.xyz/cgi-bin/blafaseldirthema/";
eine Variablenzuweisung erzeugt noch keinen Fehler. Wo wird dies verwendet,
Eines für das Gästebuch, eines für [...]
nein nein, das meine ich nicht. Wo _im Code_, also bei welchen Befehlen wird das verwendet?
was wird _dort_ für ein Fehler zurückgegeben?
Nach dem Absenden auf eines der vorhin genannten
Formulare kommt eben immer nur das für den Surfer
sichtbare:
Auch das meine ich nicht. Der Fehler ist gewöhnlich im Browser nicht sicher - dafür aber im Error-Log. Zumindest wenn das Script brauchbar geschrieben ist und kritische Aktionen mit einem 'or die "Fehler bei xyz: $!";' abgeschlossen werden.
More information about this error may be available in the server error
log.
Tja, eben :-)
zum error.log und dort steht dann drin:
[Sat Sep 9 05:03:56 2000] [error] [client XXX.XXX.XXX.XXX] Premature end of script headers: /usr/local/apache/vhosts/meinedomaine.yz/cgi-bin/blafaseldirthema/dateiname.pl
Ergo ist das Script _nicht_ brauchbar geschrieben *seufz*
Übrigens: Herzlichen Glückwunsch zur Verwendung von perl -w.
??
Das machen viel zu wenige. In SelfHTML wird es leider auch nur am Rande erwähnt - gute Perl-Programmierer beginnen ihre Scripts aber _immer_ damit.
Hättest Du das Script damit mal testweise an der Kommandozeile ausgeführt, hättest Du bei der Zuweisung von $basedir ohne "my" eine Warnung bekommen. Vielleicht ist diese ja schon Dein Fehler?
Also gut, ich habe das jetzt gerade vorhin - so wie Du
sagst - ohne dem -w gemacht:
Ähm, da hast Du mich falsch verstanden, glaube ich :-) Mit -w erfährst Du eher, was im Script noch alles falsch ist.
Und es kommt immer noch der gleiche 500 Error-Mist mit
LOG-File
Dann hast Du das Script nicht von der Kommandozeile aus gestartet (also per Telnet oder in einer DOS-Box).
use CGI::Carp 'fatalsToBrowser';
direkt nach der Shebang-Zeile.
Gut, machen wir das auch wie Du sagst:
#!/usr/bin/perl
use CGI::Carp 'fatalsToBrowser';
[...]
500 Internal Server Error
Dann ist was ziemlich an der Basis falsch. Hast Du das Script im ASCII-Modus hochgeladen? Rechte richtig gesetzt? Ist der Server passend konfiguriert? Perl an der richtigen Stelle (ich schätze ja, sonst wäre die Fehlermeldung eine andere)? Alle benötigten Module/Scripts/Kommandos richtig installiert?
Internal Server Error
Du brauchst die identische (nutzlose) Fehlermeldung übrigens nicht immer komplett auszuschreiben :-(
Vermutlich werden irgendwo anders noch Systemkommandos o.ä. aufgerufen,....
Woher soll ich das wissen?
Im Script nachgucken, es startet sie ja schließlich, bzw. versucht es.
Das ist ein ganz normaler
Apache mit CGI. Bei anderen Apaches auf anderen Hosts
und beim früheren Provider ging das ja alles auch.
Jetzt plötzlich nicht mehr. Das kann doch eigentlich
gar nicht an mir liegen, oder?
Keine Ahnung. Hast Du Deinen Provider mal gefragt, was er dazu meint?
#!/usr/bin/perl
bleibt ganz normal (es gibt auch /usr/local/bin/perl
bei anderen Hosts, wo das Teil nur so funzt)
Stimmen die Perl-Versionen dort überein? Hast Du es mal mit /usr/local/bin/perl versucht?
Was mache ich denn jetzt? Wie kann ich die "Rechte- oder
Userverteilung" feststellen? CGI ist ja aktiviert.
"CGI ist aktiviert" merkt man schon daran, daß ein ISE kommt :-) Das bringt aber nichts.
Vielleicht hilft Dir noch diese Info:
Nope, leider nicht.
Hab mal vorhin auf die Schnelle das WWW-Board von Matt Wright
ebenfalls reingeschmissen, auch der macht diesen 500 ERROR
mit "Premature end of script headers". Kann doch nicht sein,
dass ein solch einfaches WWW-Board bei Dir laeuft und bei mir
macht das Teil 500 ERROR "Premature end of script headers"?
Wie gesagt, offenbar ist etwas an der Basis falsch. Frag mal Deinen Provider etwas "kräftiger". Oder bring erst mal dieses Script zum Laufen:
#!/usr/bin/perl -w
print "Content-type: text/plain\n\n";
print 'Läuft!';
Prüfe die Scripts alle wie gesagt auch von der Kommandozeile aus (perl -c script.pl, perl script.pl, immer mit "-w" im Code).
Cheatah
Hallo Gerd!
Das -w steht für Warnings, und gibt dir ebendiese aus, wenn du das script mit perl -w script.pl an der Kommandozeile compilierst. Ansonsten gibt es dir ja nur eine Meldung, wenn was falsch ist. Aber dann bricht es die Ausführung des Scripts ohnehin ab. Und mit -c schaust du, ob die Syntax korrekt ist - gegen Tippfehler und ähnliche lästige Fehlerquellen!
Wenn du also c:...> perl -cw script.pl eingibst zeigt dir der Interpreter alle Warnings an, sagt ob die Syntax o.k. ist, und natürlich zeigts auch Fehler an ;-) -Recht nützlich !
Was deinen Fehler angeht, du kannst das script ja mal hier posten, oder sagen wo man es sich online anschauen kann!
Probier mal ein Leerzeichen zw. #! und /usr/bin/perl. Kann mir zwar nicht vorstellen dass es daran liegen sollte, aber wer weiss ??
schöne Grüsse
Bernhard
hallo,
weiss nicht obs dir hilft......
aber hast du deinen ordner im CGI-BIN auch die richtigen rechte gegeben ???......das hat bei mir mal den gleichen fehler verursacht.......
SoLong M.
Hi Manuel,
weiss nicht obs dir hilft......
aber hast du deinen ordner im CGI-BIN auch die richtigen rechte gegeben ???......das hat bei mir mal den gleichen fehler verursacht.......
Ja, natuerlich.
Ordner/Verzeichnis auf CHMOD 777.
Script auf CHMOD 777.
Und trotzdem geht es (immer noch) nicht. ;-(((
Tchau,
Gerd