Avatar billede Swift Praktikant
18. september 2003 - 22:21 Der er 19 kommentarer og
1 løsning

"Premature end of script headers" er ikke godt nok!!

På en Redhat 9 har jeg problemer med at perl CGI scripts i tilfælde af fejl kun returnerer:
----------------------------------------------
Server error!
The server encountered an internal error and was unable to complete your request.
Error message:
Premature end of script headers: test.cgi
If you think this is a server error, please contact the webmaster
Error 500
----------------------------------------------

Jeg har før (på FreeBSD) brugt:
use CGI qw(fatalsToBrowser);
For at få meddelelse om hvilken linie det går galt på...
Men det kan jeg ikke på Redhat.

Er der nogle gode ideer, til hvordan jeg får fyldestgørende fejlmeddelelser fra mine perl CGI scripts??

Jeg vil gerne have fejlmeddelelser jeg kan BRUGE til noget...fx:
"Hey din klovn - på linie 382 i 'test.cgi' har du divideret med 0 - det kan man ikke - så det rettete!!!!"
Avatar billede erikjacobsen Ekspert
18. september 2003 - 22:23 #1
Du kan kigge i din error_log
Avatar billede Swift Praktikant
18. september 2003 - 22:26 #2
Der står det samme....

Problemet er at det er temmelig belastende at sidde og studere en errorlog - når jeg nu før har siddet og udvilket med en simpel editor og en browser.

Og at fejlene bare kommer midt i HTML koden!

Og det har jeg kunnet på en FreeBSD med en lidt ældre Apache...med:
use CGI qw(fatalsToBrowser);
Avatar billede erikjacobsen Ekspert
18. september 2003 - 22:28 #3
Det kan jo være en syntaksfejl - så udføres din sætning jo ikke. Prøv

  perl ditscript.cgi

på en kommandolinie.
Avatar billede Swift Praktikant
18. september 2003 - 22:31 #4
Jeps. Følg med her:

1. Jeg skriver et script der VIRKER - og kan sende HTML til min browser.
2. Så sniger jeg en fejl ind midt mellem 2 øvrige prints FEJL:( print 27/0; )
3. Nu ved jeg der er fejl!
4. Min browser siger: Premature end of script headers
5. Loggen siger: Illegal division by zero at ..... line 17.

MEN - jeg vil så GERNE have "Illegal division by zero at ..... line 17" i min browser - efter den forrige print linie!!
Avatar billede Swift Praktikant
18. september 2003 - 22:33 #5
Og i de gode gamle dage.....

Så kunne man fx se dette i sin browser:
----------------------------------------
Velkommen til denne smarte testside
Nu skal vi have det sjovt
I næste linie divideres med 0
Illegal division by zero at ..... line 17
----------------------------------------

Det vil jeg gerne frem til igen!!
Avatar billede erikjacobsen Ekspert
18. september 2003 - 22:35 #6
Det kan du sikkert, hvis du sørger for at din http-header bliver
sendt som noget af det første i scriptet (hjælper ikke på syntaksfejl)
Avatar billede Swift Praktikant
18. september 2003 - 22:44 #7
Kan man efter headeren lave en flush ??
Avatar billede erikjacobsen Ekspert
18. september 2003 - 22:46 #8
Ja, men det skulle ikke gøre nogen forskel.
Avatar billede Swift Praktikant
18. september 2003 - 22:49 #9
Hvad kan der gå galt???
---------------------------------------
#!/usr/bin/perl -w clean
#

use CGI::Carp "fatalsToBrowser";
use strict;
no strict "vars";
require CGI;

print "Content-type: text/html \n\n";
print "<HTML>";
print "<BODY>";
print "Hejsa<BR>";
print "<BR>\n";

for( $i = 0; $i < 500; $i++ )
{
    print "VELKOMMEN ";
}

print "<BR>\n";

# Her er fejlen - når # fjernes - så vil jeg gerne have en fejlmeddelelse lige efter de mange "VELKOMMEN" linier!
#print 27/0;

for( $i = 0; $i < 500; $i++ )
{
    print "FARVEL ";
}

print "</BODY>";
print "</HTML>";
Avatar billede erikjacobsen Ekspert
18. september 2003 - 22:50 #10
Okay - hæng nu lige på:

print "Hej med dig\n";
$a=27/0;
print "Slut\n";

udskriver ikke "hej med dig", fordi oversætteren ser /0 som en syntaksfejl,
hvilket på sin vis er rimeligt nok. Men:

print "Hej med dig\n";
$b=0;
$a=27/$b;
print "Slut\n";

opdages ikke af oversætteren, men først under udførelse, hvorfor "hej med dig"
kommer med (og dermed din header).
Avatar billede Swift Praktikant
18. september 2003 - 23:07 #11
Aha - så er vi da kommet lidt længere!
Men den STOPPER bare efter at have skrivet de 500 gange "VELKOMMEN".

Den skriver ikke at der er sket en fejl...det burde den jo når jeg har "fatalsToBrowser"
Avatar billede erikjacobsen Ekspert
18. september 2003 - 23:27 #12
er det ikke

use CGI::Carp qw(fatalsToBrowser);
Avatar billede Swift Praktikant
19. september 2003 - 06:59 #13
Jo....det burde det være....men den gør ingen forskel - det er DET der er hele problemet!
Avatar billede erikjacobsen Ekspert
19. september 2003 - 07:58 #14
Har der ikke været problemer med enkelte versioner af Carp?
Standardsvaret på eksperten er jo efterhånden: formatter og reinstaller ;)
Men en nyere Carp kunne jo prøvers
Avatar billede Swift Praktikant
19. september 2003 - 08:14 #15
Hm... hvordan gøres det?
Avatar billede erikjacobsen Ekspert
19. september 2003 - 08:18 #16
Du er ved at trænge mig op i et hjørne med mere end jeg egentlig ved :)
Men er Carp ikke en del af PEAR, og kan hentes derfra?
Avatar billede Swift Praktikant
19. september 2003 - 08:36 #17
Ved det ikke....
På min W2K maskine får jeg fx denne type fejl:
--------------------------------------------------
CGI Error
The specified CGI application misbehaved by not returning a complete set of HTTP headers. The headers it did return are:

Illegal division by zero at D:\.....\test.cgi line 14
--------------------------------------------------

Og jeg mener det var noget nær det samme på en FreeBSD maskine jeg har leget med...
Avatar billede erikjacobsen Ekspert
19. september 2003 - 09:57 #18
Ja, det virker ved mig (en eller andet lidt ældre RH):
http://www.firmaet.com/cgi-bin/test.pl

og der er med 27/$b eksemplet (dit eksempel med 5 isf 500 ...)

Hvad kan vi gøre for at undersøge hvad der er galt ved dig.
Avatar billede Swift Praktikant
13. november 2005 - 11:12 #19
Erikjacobsen: Lav lige et svar, så du kan få points.
Avatar billede erikjacobsen Ekspert
13. november 2005 - 11:35 #20
Jeg samler skam slet ikke på point, tak.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Uanset kodesprog, så giver vi dig mulighederne for at udvikle det, du behøver.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester