Visiter Uprate

Un autre avantage de PHP réside dans le fait que l'on peut créer des images dynamiquement. PHP utilise la célèbre librairie GD (qui doit être installée sur le serveur). Concrètement qu'est-ce que ça apporte ? Et bien, si l'on veut dessiner un histogramme avec certaines valeurs, on peut appeler un script PHP qui va se charger de dessiner l'histogramme.

Les fonctions de la librairie GD permettent de retourner une image, c'est-à-dire un fichier PNG. Ainsi un tel fichier ne peut envoyer du texte au navigateur, il doit obligatoirement être appelé à partir d'une page HTML (généralement avec une balise <IMG src="mon_fichier.php" >).

  • Première chose à faire :

  • Pour que le navigateur sache qu'il s'agit d'un fichier de type PNG, il faut (avant d'envoyer n'importe quelle autre information au navigateur) envoyer un en-tête HTTP indiquant le type MIME du fichier, c'est-à-dire:


    headers("Content-Type: image/png");



    La principale fonction de la librairie est ImagePng() elle permet de retourner au navigateur l'image créée avec les autres fonctions:

    imagepng (entier image, chaîne NomDuFichier);



    La fonction imagecreate() permet de créer un identifiant pour une image vierge possédant les dimensions indiquées en paramètres:

    entier imagecreate(entier largeur,entier hauteur);



    Enfin la fonction imagedestroy() permet de vider la mémoire allouée à l'image dont on a passé l'identifiant en paramètre:

    imagedestroy(entier image);



  • Allocation de couleur:

  • Voici quelques exemples d'allocation de couleurs avec cette fonction:

    $noir = imagecolorallocate($image,0,0,0);

    $rouge = imagecolorallocate($image,255,0,0);

    $vert = imagecolorallocate($image,0,0xFF,0);



  • Création de forme:

  • La librairie GD fournit un panel de fonctions permettant de créer des formes primaires telles que:
    1. des rectangles
    2. des ellipses (donc des cercles)
    3. des arcs
    4. des lignes
    5. ...


  • Les chaînes de caractères:

  • PHP permet d'autre part de dessiner des chaînes de caractères dans une image grâce à une grande variété de fonctions dédiées.
    La principale fonction permettant de créer des chaînes de caractères dans l'image est imagestring():

    Cette fonction permet de créer une chaîne de caractères contenant le texte passé en argument à la position spécifiée par les arguments (x,y) avec la police indiquée.

    booléen imagestring(entier image,entier police,entier x,entier y,chaine texte,entier couleur);




    Maintenant nous alons créer des dés en PHP pour notre exemple.

  • Fichier des.php:

  • <?
    // Ce qui suit est le code d'une image PNG
    header("Content-type: image/png");

    // L'image fait 100x100
    $largeur = 100;
    $hauteur = 100;

    // on crée l'image
    $img = imageCreate($largeur, $hauteur);

    // La première couleur de la palette qui constitue la couleur de fond sera le noir
    $noir = imageColorAllocate($img, 0, 0, 0);
    $blanc = imageColorAllocate($img, 255,255,255);

    // si le dé = 1
    if($de=="1")
    {
    // imagefilledellipse (nom_image, centre_x , centre_y , largeur_de _ellipse , hauteur_de _ellipse , couleur );
    imagefilledellipse ( $img, 50 , 50 , 20 , 20 ,$blanc );
    }

    // si le dé = 2
    if($de=="2")
    {
    imagefilledellipse ( $img, 25 , 25 , 20 , 20 ,$blanc );
    imagefilledellipse ( $img, 75 , 75 , 20 , 20 ,$blanc );
    }

    // si le dé = 3
    if($de=="3")
    {
    imagefilledellipse ( $img, 25 , 25 , 20 , 20 ,$blanc );
    imagefilledellipse ( $img, 50 , 50 , 20 , 20 ,$blanc );
    imagefilledellipse ( $img, 75 , 75 , 20 , 20 ,$blanc );
    }

    // si le dé = 4
    if($de=="4")
    {
    imagefilledellipse ( $img, 25 , 25 , 20 , 20 ,$blanc );
    imagefilledellipse ( $img, 75 , 75 , 20 , 20 ,$blanc );
    imagefilledellipse ( $img, 25 , 75 , 20 , 20 ,$blanc );
    imagefilledellipse ( $img, 75 , 25 , 20 , 20 ,$blanc );
    }

    // si le dé = 5
    if($de=="5")
    {
    imagefilledellipse ( $img, 25 , 25 , 20 , 20 ,$blanc );
    imagefilledellipse ( $img, 75 , 75 , 20 , 20 ,$blanc );
    imagefilledellipse ( $img, 50 , 50 , 20 , 20 ,$blanc );
    imagefilledellipse ( $img, 25 , 75 , 20 , 20 ,$blanc );
    imagefilledellipse ( $img, 75 , 25 , 20 , 20 ,$blanc );
    }

    // si le dé = 6
    if($de=="6")
    {
    imagefilledellipse ( $img, 25 , 25 , 20 , 20 ,$blanc );
    imagefilledellipse ( $img, 75 , 75 , 20 , 20 ,$blanc );
    imagefilledellipse ( $img, 25 , 50 , 20 , 20 ,$blanc );
    imagefilledellipse ( $img, 75 , 50 , 20 , 20 ,$blanc );
    imagefilledellipse ( $img, 25 , 75 , 20 , 20 ,$blanc );
    imagefilledellipse ( $img, 75 , 25 , 20 , 20 ,$blanc );
    }

    // Envoyons le code de l'image
    imagePNG($img);

    // Et liberons les ressources
    imageDestroy($img);
    ?>


  • Le script du jeu avec les modifications pour intégrer les images:

  • /* pour initialiser le générateur de nombres aléatoires a la seconde
    srand(date("s"));*/

    // on choisira de l'initialiser à la micro-seconde
    srand((double)microtime()*1000000);
    // nombre aléatoire entre 1 et 6
    $x=rand(1,6); // générateur de nombre aléatoire pour le 1er dé
    $y=rand(1,6); // générateur de nombre aléatoire pour le 2ème dé
    $z=rand(1,6); // générateur de nombre aléatoire pour le 2ème dé

    // afichage du résultat
    // code rajouté
    // pour afficher l'image il suffit d'appeler le fichier des.php avec ces paramètres
    print("<img src=\"./des.php?de=$x\" ></A>");
    echo' ';
    print("<img src=\"./des.php?de=$y\" ></A>");
    echo' ';
    print("<img src=\"./des.php?de=$z\" ></A>");
    echo' ';

    // on test si on a fait un 421
    if( (($x==4)||($y==4)||($z==4))
    && (($x==2)||($y==2)||($z==2))
    && (($x==1)||($y==1)||($z==1)))
    {
    // si on à un 421
    print "<br> Bravo vous avez fait un 421!!!<br>";

    $jx = 1;
    // si c'est la premiere fois on cree le fichier jeux.txt
    if (!is_file("jeux.txt"))
    {
    $fd = fopen("jeux.txt", "w+"); // ouverture en lecture et écriture (la fonction crée le fichier s'il n'existe pas)
    print("<B><FONT COLOR=\"green\">" . $jx ." Visiteurs(euses) a fait un 421</B></FONT><br>");
    }
    // sinon on recupere le nombre de visiteur dans le fichier, on l'incremente de 1
    else
    {
    $fd = fopen("jeux.txt", "r"); // ouverture en lecture seulement
    $jx = fgets($fd, 255); // retourne la ligne courante jusqu'à soit un retour charriot, soit la fin du fichier, soit la longueur spécifiée.
    $jx++; // on icrémente la valeur du fichier
    print("<B><FONT COLOR=\"green\">" . $jx ." Visiteurs(euses) ont fait un 421</B></FONT><br>");
    fclose($fd); // on ferme le fichier
    $fd = fopen("jeux.txt", "w");
    }
    // on remet a jour le fichier avec la nouvelle valeur incrémentée du compteur.
    fputs($fd, $jx); // on écrit le nombre dans le fichier
    fclose($fd);
    }
    else
    {
    if (!is_file("jeux.txt"))
    {
    $jx=0;
    $fd = fopen("jeux.txt", "w+"); // ouverture en lecture et écriture (la fonction crée le fichier s'il n'existe pas)
    print"<br><FONT COLOR=\"red\">Perdu !!! </FONT>
    }
    else
    {
    print"<br><FONT COLOR=\"red\">Perdu !!! Mais </FONT> ";
    $fd = fopen("jeux.txt", "r"); // ouverture en lecture seulement
    $jx = fgets($fd, 255); // retourne la ligne courante jusqu'à soit un retour charriot, soit la fin du fichier, soit la longueur spécifiée.
    print("<FONT COLOR=\"red\">" . $jx ." visiteurs(euses) ont fait un 421</FONT><br>");
    } fputs($fd, $jx); // on écrit le nombre dans le fichier
    fclose($fd);

    }

    Voila le résultat du script :


    Perdu !!! Mais 785 visiteurs(euses) ont fait un 421



    Nous allons maintenant appliquer le PHP au "formulaire".

    Visiter Uprate