2010-02-07 14 views
2
Fatals

J'utilise le code suivant pour tester la sortie des erreurs fatales au navigateur:ActivePerl ne sortie au navigateur

use CGI; 
use CGI::Carp qw(fatalsToBrowser); 

die "test"; 

J'attends de voir une erreur dans le navigateur, mais il ISN Pas n'importe, je reçois juste une réponse régulière 500. J'ai oublié que j'avais des pages d'erreur personnalisées pour les demandes à distance, et je reçois maintenant Script failed to send data..

aussi:

> perl -w index.pl 
Status: 500 
Content-type: text/html 

<h1>Software error:</h1> 
<pre>test at index.pl line 4.</pre> 
<p> 
For help, please send mail to this site's webmaster, giving this error message and the time and date of the error. 

</p> 
[Mon Feb 8 18:29:52 2010] index.pl: test at index.pl line 4. 
+0

Ne serait-il pas préférable de tester avec quelque chose de syntaxiquement valide? –

+0

Si je remplace l'impression par 'print" test ";' cela fonctionne bien, je veux tester les erreurs de sortie dans le navigateur maintenant. –

+0

Et vous vous attendez à des erreurs de syntaxe qui tuer Perl avant même que vos modules soient chargés pour être en quelque sorte sortie? Essayez de générer une erreur d'exécution fatale et voyez si cela fonctionne. –

Répondre

4

Essayez d'imprimer deux nouvelles lignes avant tout. Cela signale la fin des en-têtes HTTP au serveur comme le dit le 'CGI standard'. Ou vous pourriez être en mesure d'utiliser quelque chose comme ceci: (comme copié du Carp man page):

use CGI::Carp qw(set_die_handler); 
BEGIN { 
    sub handle_errors { 
     my $msg = shift; 
     print "content-type: text/html\n\n"; 
     print "<h1>Oh gosh</h1>"; 
     print "<p>Got an error: $msg</p>"; 
    } 
    set_die_handler(\&handle_errors); 
} 

Si cela ne fonctionne pas voici quelques astuces:

#!perl 
BEGIN { $| = 1; print "\n\n" } 
open STDERR, ">&STDOUT"; 

..Et une quelques astuces supplémentaires in this Perl Journal article.

+0

Cela renvoie tout de même juste un 500. –

+0

Qu'en est-il de mettre cela en haut de votre fichier cgi: BEGIN {$ | = 1; print "\ n \ n"} – ziya

+0

Cela me donne un 200, mais il n'imprime pas le 'die'. –