IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

Problème avec fichier CGI


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Par défaut Problème avec fichier CGI
    Bonjour,

    j'ai écrit un programme perl pour générer une image.
    Mes fichiers sont monGraphe.pl :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    #!usr/bin/perl -w
    use strict;
     
    my $text =<<EOP;
    <BR><BR>
    <TABLE BORDER="0" CELLPADDING="7" CELLSPACING="2" BGCOLOR="#000000" WIDTH="100%">
        <tr bgcolor="#336799"><td>
            <font color="#ffffff">Graphe : </font><br>
        </td></tr><tr bgcolor="#ffffff"><td valign="top" width="750">
            <center>
              <img src="graphe.cgi?type=pie&data=1">
            </center><br>
    </TABLE>
    EOP
     
    open (FICHIER, ">monGraphe.html") or die("Erreur ouverture");
    print (FICHIER $text);
    close(FICHIER);
    Et le fichier graphe.cgi (je n'ai mis que l'essentiel)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    #!usr/bin/perl
    use strict;
    use DBI;
    use Data::Dumper;
    use GD;
    use param
    use GD::Graph::pie;
     
    my $type = length(param("type")) ? param("type") : '';
    my $data = length(param("data")) ? param("data") : '';
     
     
    sub _make_pie {
        my ($title, $width, $height, $data1, $data2, $data3, $data4, $color1, $color2, $color3, $color4) = @_;
     
        # make data
        my $total = $data1 + $data2 + $data3 + $data4 ;
        my $data1_per = _percentage($data1, $total);
        my $data2_per = _percentage($data2, $total);
        my $data3_per = _percentage($data3, $total);
        my $data4_per = _percentage($data4, $total);
        my @labels = ("$data1 ($data1_per\%)", "$data2 ($data2_per\%)",
    		  "$data3 ($data3_per\%)", "$data4 ($data4_per\%)");
        my @data = ([@labels], [$data1, $data2, $data3, $data4]);
     
        my $mygraph = GD::Graph::pie->new($width, $height);
     
        $mygraph->set(
    		  pie_height              => 10,
                      title                   => $title,
    		  dclrs                   => [$color1, $color2, $color3, $color4],
                      transparent             => 0,
                      ) or warn($mygraph->error);
     
        # print graph
        my $gd = $mygraph->plot(\@data) ;
    	open(PNG, '>', "camembert.png") || die "Erreur d'ecriture : $!";
    	binmode PNG;
    	print PNG $gd->png;
    	close PNG;	
    }
     
     
    if(defined($type) && length($type) && ($type eq 'pie')) {
    		#Si l'id vaut 1 c'est le cas de Tous
    		my ($title, $width, $height, $data1, $data2, $data3, $data4, $color1, $color2, $color3, $color4);
    		if($data == 1){
    			#pour le calcul de "Tous"
    			my ($total_valid, $total_invalid, $total_waited, $total_returned) = (0,0,0,0);
     
    			while(my ($cle, $value) = each(%decode_identifiant)){
    				$total_valid += $$value[0];
    				$total_invalid += $$value[1];
    				$total_waited += $$value[2];
    				$total_returned += $$value[3];
    			}
    			($title, $width, $height, $data1, $data2, $data3, $data4, $color1, $color2, $color3, $color4) = (
    			$titles_pie[$data], 250, 250, $total_valid, $total_invalid, $total_waited, $total_returned,
    			"green", "orange", "lgray", "red");
    		}
    		else{
    			my $ref = $decode_identifiant{$data};
    			($title, $width, $height, $data1, $data2, $data3, $data4, $color1, $color2, $color3, $color4) = (
    			$titles_pie[$data], 250, 250, $$ref[0], $$ref[1], $$ref[2], $$ref[3], 
    			"green", "orange", "lgray", "red");
    		}   
    		_make_pie($title, $width, $height, $data1, $data2, $data3, $data4, $color1, $color2, $color3, $color4);
    }
    Quand je lance la commande
    perl monGraphe.pl, j'obtiens :
    http://cjoint.com/data/myovJuj3ye.htm

    Mais quand je remplace, la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     <img src="graphe.cgi?type=pie&data=1">
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <img src="camembert.png">
    camembert.jpg correspond à l'image obtenue lorsque je lance perl graph.cgi
    j'obtiens :
    http://cjoint.com/data/myowsfnaUG.htm

    J'aimerai bien savoir pourquoi dans le cas ou j'appelle graphe.cgi, je n'obtiens pas l'image de mon cammbert.

    Merci

  2. #2
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    J'aimerai bien savoir pourquoi dans le cas ou j'appelle graphe.cgi, je n'obtiens pas l'image de mon cammbert.
    J'aimerais bien savoir pourquoi tu t'attends à l'obtenir ?

    Ton script écrit l'image dans un fichier quelconque, pourquoi t'attends-tu à ce que cette image soit affichée ? Comment le serveur pourrait-il deviner que le client attend une image et que cette image est stockée dans le fichier camembert.png ?

    Il faut que le script renvoie directement l'image, pas qu'elle l'écrive dans un fichier arbitraire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    #!usr/bin/perl
    use strict;
    use DBI;
    use Data::Dumper;
    use GD;
    use GD::Graph::pie;
     
    use CGI qw(:standard);
     
    print header('image/png');
     
    my $type = length(param("type")) ? param("type") : '';
    my $data = length(param("data")) ? param("data") : '';
     
     
     
    sub _make_pie {
        my ($title, $width, $height, $data1, $data2, $data3, $data4, $color1, $color2, $color3, $color4) = @_;
     
        # make data
        my $total = $data1 + $data2 + $data3 + $data4 ;
        my $data1_per = _percentage($data1, $total);
        my $data2_per = _percentage($data2, $total);
        my $data3_per = _percentage($data3, $total);
        my $data4_per = _percentage($data4, $total);
        my @labels = ("$data1 ($data1_per\%)", "$data2 ($data2_per\%)",
    		  "$data3 ($data3_per\%)", "$data4 ($data4_per\%)");
        my @data = ([@labels], [$data1, $data2, $data3, $data4]);
     
        my $mygraph = GD::Graph::pie->new($width, $height);
     
        $mygraph->set(
    		  pie_height              => 10,
                      title                   => $title,
    		  dclrs                   => [$color1, $color2, $color3, $color4],
                      transparent             => 0,
                      ) or warn($mygraph->error);
     
        # print graph
        my $gd = $mygraph->plot(\@data) ;
    	binmode STDOUT;
    	print $gd->png;	
    }
     
     
    if(defined($type) && length($type) && ($type eq 'pie')) {
    		#Si l'id vaut 1 c'est le cas de Tous
    		my ($title, $width, $height, $data1, $data2, $data3, $data4, $color1, $color2, $color3, $color4);
    		if($data == 1){
    			#pour le calcul de "Tous"
    			my ($total_valid, $total_invalid, $total_waited, $total_returned) = (0,0,0,0);
     
    			while(my ($cle, $value) = each(%decode_identifiant)){
    				$total_valid += $$value[0];
    				$total_invalid += $$value[1];
    				$total_waited += $$value[2];
    				$total_returned += $$value[3];
    			}
    			($title, $width, $height, $data1, $data2, $data3, $data4, $color1, $color2, $color3, $color4) = (
    			$titles_pie[$data], 250, 250, $total_valid, $total_invalid, $total_waited, $total_returned,
    			"green", "orange", "lgray", "red");
    		}
    		else{
    			my $ref = $decode_identifiant{$data};
    			($title, $width, $height, $data1, $data2, $data3, $data4, $color1, $color2, $color3, $color4) = (
    			$titles_pie[$data], 250, 250, $$ref[0], $$ref[1], $$ref[2], $$ref[3], 
    			"green", "orange", "lgray", "red");
    		}   
    		_make_pie($title, $width, $height, $data1, $data2, $data3, $data4, $color1, $color2, $color3, $color4);
    }
    --
    Jedaï

  3. #3
    Membre éclairé
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Par défaut
    Merci pour la réponse. Je vais essayer ce que tu proposes et te tiens au courant.

  4. #4
    Membre éclairé
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Par défaut
    J'ai ajouté les modifications que tu avais apporté mais l'image n'apparait toujours pas dans ma page html ...

  5. #5
    Membre éclairé
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Par défaut
    J'ai l'impression que le fichier graphe.cgi n'est pas appelé car j'y ai mis des print mais ils ne sont pas affichés dans la console.
    J'ai mis mes fichiers graphe.cgi et monGraphe.pl dans le répertoire cgi-bin de Apache comme ceci :
    http://cjoint.com/data/myqLRMZSLT.htm

    C'est bien ici qu'il faut placer mes fichiers ? Si vous avez des idées pour corriger, le soucis.

    Merci

  6. #6
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Si tu es sous windows, ton shebang est inadéquat, tu devrais plutôt avoir quelque chose comme "#!C:\Perl\bin\perl.exe", et pour Apache, ça a de l'importance.

    car j'y ai mis des print mais ils ne sont pas affichés dans la console.
    Tu ne peux pas envoyer de message sur la "console" dans un CGI !! Quelle console utiliserait le script ?
    Quand tu écris sur STDOUT (c'est à dire l'endroit où tu écris par défaut), c'est envoyé vers le client, quand tu écris sur STDERR (défaut pour die() et warn()) c'est enregistré dans les logs d'Apache.

    --
    Jedaï

Discussions similaires

  1. Problème avec fichier .exe
    Par rostomus dans le forum MATLAB
    Réponses: 3
    Dernier message: 28/12/2006, 17h02
  2. [XSL] Problème avec fichier distant
    Par ploxien dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 19/10/2006, 20h24
  3. Problème avec fichier Excel génère erreur
    Par Yanmeunier dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 17/02/2006, 11h53
  4. [Delphi 3] Problème avec fichier ressource .RES
    Par delphim dans le forum EDI
    Réponses: 2
    Dernier message: 28/06/2005, 18h11
  5. Problème avec fichier texte
    Par jpdelx dans le forum ASP
    Réponses: 7
    Dernier message: 13/11/2003, 13h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo