Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3116 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  pb pour insérer image dans page HTML avec un script cgi .pl

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

pb pour insérer image dans page HTML avec un script cgi .pl

n°736346
fata51
Posté le 24-05-2004 à 16:05:03  profilanswer
 

Bonjour,
 
A partir d'un formulaire HTML je vais devoir créer une page HTML (avec un script CGI en perl) ou sera inserée une image PNG (et seulement PNG)
cette image sera crée en fonction des paramètres récupérés du formulaire
 
Je viens de tester la création d'une page HTML (ca marche!) mais qd j'essaie de lui insérer une image quelconque l'erreur suivante apparait :  
 
Message d'erreur: Premature end of script headers: historic.pl
 
Le code de mon script de test est celui ci :
 
#!/usr/bin/perl
 
use CGI_Lite;
 
$cgi=new CGI_Lite;
%in = $cgi->parse_form_data;
print "Content-type: text/html\n\n";
print "<html><head>\n";
print "<title></title></head>\n";
print "<BODY BGCOLOR=#FFFFFF LEFTMARGIN=0 TOPMARGIN=0 MARGINWIDTH=0 MARGINHEIGHT=0>";
print "<IMG SRC="path_to_image">";
print "</body></html>\n";
 
Je sais que je n'utilise pas les paramètres chargés dans le tableau %in mais c juste un test pour insérer l'image... :bounce:  
 
J'espère que vous pourrez m'aider car je débute...
Merci d'avance
fata51  :hello:  

mood
Publicité
Posté le 24-05-2004 à 16:05:03  profilanswer
 

n°736380
fata51
Posté le 24-05-2004 à 16:16:03  profilanswer
 

up up!!!

n°736738
pospos
Posté le 24-05-2004 à 22:02:02  profilanswer
 

Code :
  1. print "<IMG SRC="path_to_image">";


 
c'est la qu'est l'erreur: tu ne peut pas metre de " à l'interieur d'une chaine quotée par des " !
 
donc soit tu fais:

Code :
  1. print "<IMG SRC=\"path_to_image\">";


 
soit:

Code :
  1. print '<IMG SRC="path_to_image">';


n°737116
fata51
Posté le 25-05-2004 à 08:22:34  profilanswer
 

merci  
c bon ca marche

n°737132
fata51
Posté le 25-05-2004 à 08:44:51  profilanswer
 

par contre meme si mon fichier pl se comporte comme un cgi qui génere une page web est ce que je peux lui insérer un programme en perl (entre deux instructions print par exemple) ?
ca n'a pas l'air de marcher...
merci

n°737175
fata51
Posté le 25-05-2004 à 09:32:19  profilanswer
 

en effet je lui donneau début les instructions "print" permettant de forger la page web et à la suite de la dernière qui ferme la balise body et html j'ajoute mon programme qui est en censé produire une image pour ensuite l'insérer dans la page web mais cette image n'est pas crée... (alors que le programme fonctionne seul)
Pourquoi?
 
merci

n°737242
fata51
Posté le 25-05-2004 à 09:57:43  profilanswer
 

quelques détails de plus sur mon problème :  
en fait il faudrai que je mette mon programme avant les "print" pour que celui ci génere l'image et ensuite que je puisse l'insérer dans ma page a créer mais qd je fais ca j'ai une erreur (Premature end of script headers: historic.pl )
pourtant ces instructions ne devraient pas géner l'ecriture de la page web car seul les print sont pris en compte, n'est ce pas?
ce qui est bizarre c que qd les print sont au débuts la page s'affiche bien (sans l'image crée aussi!!!)
j'espère avoir été clair
 
merci

n°737257
fata51
Posté le 25-05-2004 à 10:09:51  profilanswer
 

#!/usr/bin/perl
 
use CGI_Lite;
use lib qw(/usr/local/rrdtool/lib/perl);
use RRDs;
use Getopt::Long;
use GD;
 
################################################################
# Configuration parameters
$WGET   = "/usr/local/bin/wget -qO -";
$CONFIG = "/weathermap/weathermap.conf";
$OUTPUT = "historic.png";
$DEBUG  = 0;
$WIDTH  = 880;
$HEIGHT = 750;
$rrdtool="/usr/local/rrdtool/bin/rrdtool";
#################################################################
 
$cgi=new CGI_Lite;
%in = $cgi->parse_form_data;
 
&read_config($CONFIG);
 
if($background){
        open (PNG,"$background" ) || die "$background: $!\n";
        $map = newFromPng GD::Image(PNG) || die "newFromPng failed.";
        close PNG;
} else {
        $map=new GD::Image($WIDTH,$HEIGHT);
}
 
&alloc_colors;
 
foreach $link (keys %target){
 
        $data = $target{$link};
 
        open(LOG, "$data" );
 
        ($input{$link},$output{$link})=&get_data;
 
        close(LOG);
}
 
foreach $link (keys %target){
        $outrate=(int(($output{$link}/$maxbytes{$link}+0.005)*100)>100) ? 100:in
t(($output{$link}/$maxbytes{$link})*100);
        $inrate=(int(($input{$link}/$maxbytes{$link}+0.005)*100)>100) ? 100:int(
($input{$link}/$maxbytes{$link})*100);
 
        if($output{$link} != 0 && $outrate == 0) { $outrate=1 }
        if($input{$link} != 0 && $inrate == 0) { $inrate=1 }
 
        # draw lines...
 
        $width{$link}=sqrt($bandwidth{$link})/4;
 
        &draw_arrow(
                $xpos{$nodea{$link}},
                $ypos{$nodea{$link}},
                &middle($xpos{$nodea{$link}},$xpos{$nodeb{$link}}),
                &middle($ypos{$nodea{$link}},$ypos{$nodeb{$link}}),
                $width{$link}, 1, &select_color($outrate));
        &draw_arrow(
                $xpos{$nodea{$link}},
                $ypos{$nodea{$link}},
                &middle($xpos{$nodea{$link}},$xpos{$nodeb{$link}}),
                &middle($ypos{$nodea{$link}},$ypos{$nodeb{$link}}),
                $width{$link}, 0, $black);
 
        &label(&middle($xpos{$nodea{$link}},&middle($xpos{$nodea{$link}},$xpos{$
nodeb{$link}})),
                &middle($ypos{$nodea{$link}},&middle($ypos{$nodea{$link}},$ypos{
$nodeb{$link}})),
                $outrate . "%", 0);
 
        &draw_arrow(
                $xpos{$nodeb{$link}},
                $ypos{$nodeb{$link}},
                &middle($xpos{$nodea{$link}},$xpos{$nodeb{$link}}),
                &middle($ypos{$nodea{$link}},$ypos{$nodeb{$link}}),
                $width{$link}, 1, &select_color($inrate));
        &draw_arrow(
                $xpos{$nodeb{$link}},
                $ypos{$nodeb{$link}},
                &middle($xpos{$nodea{$link}},$xpos{$nodeb{$link}}),
                &middle($ypos{$nodea{$link}},$ypos{$nodeb{$link}}),
                $width{$link}, 0, $black);
 
        &label(&middle($xpos{$nodeb{$link}},&middle($xpos{$nodea{$link}},$xpos{$
nodeb{$link}})),
                &middle($ypos{$nodeb{$link}},&middle($ypos{$nodea{$link}},$ypos{
$nodeb{$link}})),
                $inrate . "%", 0);
}
 
foreach(keys %xpos){
        &label($xpos{$_},$ypos{$_},$label{$_}, 3);
}
 
 
&annotation;
 
# print image...
open(PNG,">$OUTPUT" )||die("$OUTPUT: $!\n" );
print PNG $map->png;
close PNG;
 
 
# print labels
sub label{
        my($xpos,$ypos,$label,$pad)=@_;
        my($strwidth)=(gdLargeFont->width*length($label))-3;
        my($strheight)=(gdLargeFont->height)-3;
        if ($strwidth > 0){
        $map->filledRectangle(
                $xpos-$strwidth/2-$pad-1, $ypos-$strheight/2-$pad+1,
                $xpos+$strwidth/2+$pad, $ypos+$strheight/2+$pad-1,
                $black);
        $map->filledRectangle(
                $xpos-$strwidth/2-$pad, $ypos-$strheight/2-$pad+2,
                $xpos+$strwidth/2+$pad-1, $ypos+$strheight/2+$pad-2,
                $white);
        $map->string(gdLargeFont,
                $xpos-$strwidth/2-1, $ypos-$strheight/2-1,
                $label, $black);
        }
}
 
# print annotation
sub annotation{
        my($title)="Traffic load";
        $strwidth=gdLargeFont->width*length($label{$_});
        $strheight=gdLargeFont->height;
 
        $map->string(gdLargeFont, 570, 555, "Etat du r├®seau le $in{'jour'} $in{
'mois'} $in{'annee'} a $in{'heure'}h et $in{'minute'}min", $black);
 
        $map->filledRectangle($keyxpos,$keyypos,
                $keyxpos+gdLargeFont->width*length($title)+10,
                $keyypos+gdLargeFont->height*($scales+1)+10,
                $gray);
        $map->rectangle($keyxpos,$keyypos,
                $keyxpos+gdLargeFont->width*length($title)+10,
                $keyypos+gdLargeFont->height*($scales+1)+10,
                $black);
        $map->string(gdLargeFont,
                $keyxpos+4,
                $keyypos+4,
                "Traffic load",  $black);
 
        my($i)=1;
        foreach(sort {$scale_low{$a}<=>$scale_low{$b}} keys %scale_low){
                $map->filledRectangle(
                        $keyxpos+6,
                        $keyypos+gdLargeFont->height*$i+8,
                        $keyxpos+6+16,
                        $keyypos+gdLargeFont->height*$i+gdLargeFont->height+6,
                        $color{$_});
                $map->string(gdLargeFont,
                        $keyxpos+6+20,
                        $keyypos+gdLargeFont->height*$i+8,
                        "$scale_low{$_}-$scale_high{$_}%", $black);
                $i++
        }
}
 
sub select_color {
        my($rate)=($_[0]>100) ? 100:$_[0];
        if($rate=="0" ){return($darkgray)}
        foreach(sort {$scale_high{$a}<=>$scale_high{$b}} keys %scale_high){
                if($scale_low{$_}<=$rate && $rate<=$scale_high{$_}){
                        return($color{$_});
                }
        }
}
 
sub alloc_colors {
        $white=$map->colorAllocate(255,255,255);
        $gray=$map->colorAllocate(248,248,248);
        $black=$map->colorAllocate(0,0,0);
        $darkgray=$map->colorAllocate(128,128,128);
 
        foreach(keys %scale_red){
                $color{$_} = $map->colorAllocate($scale_red{$_},$scale_green{$_
,$scale_blue{$_});
        }
}
 
 
sub read_config {
my($config)=shift;
my($node,$link);
 
$scales=0;
open(CONF,$config) or die "$config: $!\n";
while(<CONF> ){
        if(/^\s*BACKGROUND\s+(\S+)/i){
                if(-s "$1" ){
                        $background=$1;
                }
        }
        if(/^\s*WIDTH\s+(\d+)/i){
                if("$1" ne "" ){
                        $WIDTH=$1;
                }
        }
        if(/^\s*HEIGHT\s+(\d+)/i){
                if("$1" ne "" ){
                        $HEIGHT=$1;
                }
        }
        if(/^\s*NODE\s+(\w+)/i){
                $node=$1;
        }
        if(/^\s*POSITION\s+(\d+)\s+(\d+)/i){
                $xpos{$node}=$1;
                $ypos{$node}=$2;
        }
        if(/^\s*LABEL\s+(\S+)/i){
                $label{$node}=$1;
        }
 
        if(/^\s*LINK\s+(\S+)/i){
                $link=$1;
        }
        if(/^\s*NODES\s+(\S+)\s+(\S+)/i){
                $nodea{$link}=$1;
                $nodeb{$link}=$2;
        }
        if(/^\s*TARGET\s+(\S+)/i){
                $target{$link}=$1;
        }
        if(/^\s*BANDWIDTH\s+(\d+)/i){
                $bandwidth{$link}=$1;
                $maxbytes{$link}=$bandwidth{$link}*1024/8;
        }
        if(/^\s*KEYPOS\s+(\d+)\s+(\d+)/i){
                $keyxpos=$1;
                $keyypos=$2;
        }
        if(/^\s*SCALE\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)/i){
                $scale_low{"$1:$2"}=$1;
                $scale_high{"$1:$2"}=$2;
                $scale_red{"$1:$2"}=$3;
                $scale_green{"$1:$2"}=$4;
                $scale_blue{"$1:$2"}=$5;
                $scales++;
        }
}
}
 
 
sub middle{
        return int( $_[0] + ($_[1]-$_[0])/2 )
}
 
sub dist{
        return int( sqrt( $_[0]*$_[0] + $_[1]*$_[1] ) )
}
 
sub newx{
        my($a,$b,$x,$y)=@_;
        return int( cos( atan2($y,$x) + atan2($b,$a) ) * sqrt( $x*$x + $y*$y )
;
}
 
sub newy{
        my($a,$b,$x,$y)=@_;
        return int( sin( atan2($y,$x) + atan2($b,$a) ) * sqrt( $x*$x + $y*$y )
;
}
 
 
 
sub draw_arrow {
        my($x1,$y1,$x2,$y2,$w,$solid,$color)=($_[0],$_[1],$_[2],$_[3],$_[4],$_[
],$_[6]);
        my($arrow)=new GD::Polygon;
 
        $arrow->addPt(
                $x1 + &newx($x2-$x1, $y2-$y1, 0, $w),
                $y1 + &newy($x2-$x1, $y2-$y1, 0, $w)
                );
 
        $arrow->addPt(
                $x2 + &newx($x2-$x1, $y2-$y1, -4*$w, $w),
                $y2 + &newy($x2-$x1, $y2-$y1, -4*$w, $w)
                );
 
        $arrow->addPt(
                $x2 + &newx($x2-$x1, $y2-$y1, -4*$w, 2*$w),
                $y2 + &newy($x2-$x1, $y2-$y1, -4*$w, 2*$w)
                );
 
        $arrow->addPt( $x2, $y2);
 
        $arrow->addPt(
                $x2 + &newx($x2-$x1, $y2-$y1, -4*$w, -2*$w),
                $y2 + &newy($x2-$x1, $y2-$y1, -4*$w, -2*$w)
                );
 
        $arrow->addPt(
                $x2 + &newx($x2-$x1, $y2-$y1, -4*$w, -$w),
                $y2 + &newy($x2-$x1, $y2-$y1, -4*$w, -$w)
                );
 
        $arrow->addPt(
                $x1 + &newx($x2-$x1, $y2-$y1, 0, -$w),
                $y1 + &newy($x2-$x1, $y2-$y1, 0, -$w)
                );
 
        if($solid){
                $map->filledPolygon($arrow,$color);
        }else{
                $map->polygon($arrow,$color);
        }
}
 
# rechercher les donn├®es dans le fichier rrd
sub get_data
{
        $lower_to=$to;
        $lower_to =~ tr/A-Z/a-z/;
 
        $lower_from=$from;
        $lower_from =~ tr/A-Z/a-z/;
 
        @output=`$rrdtool fetch $data AVERAGE -s -10min`;
 
        my @return_info;
 
        foreach(@output)
        {
        if(/^(\d+):\s(\d\.\d{10}e\+\d{2})\s(\d\.\d{10}e\+\d{2})/ )
                { @return_info = ($2,$3); }
 
        }
        return @return_info;
}
 
print "Content-type: text/html\n\n";
print "<html><head>\n";
print "<title></title></head>\n";
print "<BODY BGCOLOR=#FFFFFF LEFTMARGIN=0 TOPMARGIN=0 MARGINWIDTH=0 MARGINHEIGH
=0>";
print "<IMG SRC=\"/weathermap/weathermap.png\" WIDTH=900 HEIGHT=620 BORDER=0>";
print "</body></html>\n";
 
voila c la source dem on programme
n'etudiez pas le programme an fait c un programme weathermap qui génere un png en focntion de données snmp de traffic sur un réseau

n°737261
Profil sup​primé
Posté le 25-05-2004 à 10:10:52  answer
 

et [:autobot]

n°737263
fata51
Posté le 25-05-2004 à 10:11:08  profilanswer
 

donc ca serai plutot un problème de syntaxe a détecter qui expliquerai l'erreur "Premature end of script headers: historic.pl"

mood
Publicité
Posté le 25-05-2004 à 10:11:08  profilanswer
 

n°737396
fata51
Posté le 25-05-2004 à 11:20:15  profilanswer
 

c bon c reglé le problème venait du chemin vers le fichier de conf
merci

n°737440
burgergold
5$? va chez l'diable!
Posté le 25-05-2004 à 11:47:50  profilanswer
 

apprend à utiliser les balises de code sur le forum


---------------
http://www.boincstats.com/signature/user_664861.gif

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  pb pour insérer image dans page HTML avec un script cgi .pl

 

Sujets relatifs
erreur dans une page jspdemande d'info sur <html:select .....
[HTML - Outlook] Récupérer un Rendez-vous ?[Image] trouver les dimensions
comment faire apparaitre 1 code dans 1 page htmlactualisation page
[HTML] agrandir un champ texte multi-lignes sans barre de défilementinsérer
inserer automatiquement des donnes contenues dans un fichier 
Plus de sujets relatifs à : pb pour insérer image dans page HTML avec un script cgi .pl


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR