2010-05-20 23 views
0

Je suis un débutant en Perl CGI, etc. J'expérimente le concept de serveur-poussoir avec un morceau de code Perl. Il est censé envoyer une image jpeg au client toutes les trois secondes.Comment puis-je envoyer plusieurs images dans un serveur en appuyant sur le programme Perl CGI?

Malheureusement, rien ne semble fonctionner. Quelqu'un peut-il aider à identifier le problème?

Voici le code:

use strict; 
# turn off io buffering 
$|=1; 
print "Content-type: multipart/x-mixed-replace;"; 
print "boundary=magicalboundarystring\n\n"; 
print "--magicalboundarystring\n"; 

#list the jpg images 
my(@file_list) = glob "*.jpg"; 
my($file) = ""; 

foreach $file(@file_list) 
{ 
    open FILE,">", $file or die "Cannot open file $file: $!"; 
    print "Content-type: image/jpeg\n\n"; 

    while (<FILE>) 
    { 
     print "$_"; 
    } 

    close FILE; 
    print "\n--magicalboundarystring\n"; 
    sleep 3; 
    next; 

} 

EDIT: ajout désactiver i/o mise en mémoire tampon, ajoutée "use strict" et "@file_list", "$ fichier" sont faits locaux

+2

Première utilisation stricte et les avertissements. Suivant: Toute erreur que vous pouvez voir ?, En outre, vous ouvrez le fichier $ pour lire ou écrire? – Space

+0

@Octopus Aucune erreur dans le fichier journal ni dans le navigateur, juste que l'image n'est pas affichée. La boucle semble fonctionner correctement. Le fichier $ est ouvert pour lecture. – Jujjuru

+0

C'est pourquoi j'ai suggéré d'utiliser strict et avertissements :). – Space

Répondre

1

tire la chasse sortie. Le plus souvent, le serveur garde la réponse dans la mémoire tampon (buffer). Vous voudrez peut-être faire fflush(STDOUT) après chaque print ou autoflush STDOUT fois.

Jetez un oeil à http://www.abiglime.com/webmaster/articles/cgi/032498.htm

[quote]

Pour utiliser le script ci-dessous, vous aurez besoin de mettre en œuvre un appelé "non-parsé" CGIs sur votre site. Normalement, le serveur Web mettra en tampon toutes les sorties de votre programme CGI jusqu'à ce que le programme se termine. Nous ne voulons pas que cela arrive ici. Avec Apache, c'est assez facile. Si le nom de votre programme CGI commence avec "nph-", il ne sera pas analysé. De plus, changez le glob "/ some/path/*" en chemin où vous voulez rechercher les fichiers.

[/ quote]

+0

@Gaurav J'ai désactivé le buffer d'E/S. Mais toujours le même résultat :( – Jujjuru

+0

Jetez un oeil à la réponse sur la console et voyez ce que vous obtenez Sur firefox, essayez d'utiliser Firebug, pour IE utilisez Fiddler. –