30/12/2008, 16:07
(Modification du message : 30/12/2008, 16:13 par LitteulBlack.)
Génération d'une image PHP
Je viens faire part de mon retour d'expérience sur la génération d'une image (php) permettant de voir le contenu en temps réel des messages présent sur un channel.
Explicatif:
Le but est d'utiliser les logs que va créer l'eggdrop évitant la récriture d'un script TCL.
Note importante: Il est obligatoire que l'eggdrop se trouve sur la même machine que le serveur Apache. Une solution est en cours d'écriture pour palier au problème.
Condition:
Le script nécésite la présence de (voir ci-dessous):
- PHP
- PHP-CGI
- GD2
- Crontab
Nom du channel: #image
Nombre de log nécessaire: 2
Configuration de l'eggdrop:
Voici la configuration à mettre en place.
Rajouter:
Code :
logfile p #image "logs/pimage.log"
logfile o #image "logs/jimage.log"
Attention: Vérifier la valeur de "set max-logs"
Script PHP:
Code PHP :
<?php
/*
* ================================================================
* Génération d'image
* ================================================================
* by LitteulBlack <litteulblack@ipbstudio.com>
* (c) 2008 LitteulBlack
* ================================================================
* Licence : http://creativecommons.org/licenses/by-nc-sa/2.0/fr/
* ================================================================
*/
// Environement GD2
header ("Content-type: image/png");
putenv('GDFONTPATH=' . realpath('.'));
// Image background
$image = imagecreatefrompng("bck_image.png");
// On récupère le fichier log message
$file_p = file("../logs/pimage.log");
//----------------------
// Récupération de la dernière ligne
// A répéter suivant le nb de ligne à afficher
//----------------------
$l1 .= sizeof($file_p)-1;
$ligne1 .= $file_p[$l1];
// Suppression de l'heure
$ligne1=substr_replace ( $ligne1, "", 0, 8);
// Longeur de la ligne
$max=62;
if(strlen($ligne1)>=$max)
{
$ligne1=substr($ligne1,0,$max);
$espace=strrpos($ligne1," ");
$ligne1=substr($ligne1,0,$espace)."...";
}
// On récupère le fichier log join
$file_j = file("../logs/jimage.log");
// Nombre de connecté(s) sur le channel
while($row = array_pop($file_j))
{
if (preg_match('#\]$#', $row))
{
preg_match('#\[m\/([0-9])#', $row, $user);
break;
}
}
// Définition de la couleur et la police d'écriture
$color_p = imagecolorallocate($image, 255, 255, 255);
$font_p = 'message.ttf';
$color_j = ImageColorAllocate ($image, 255, 255, 255);
$font_j = 'users.ttf';
// Insertion du texte
imagettftext($image, 10, 0, 60, 34, $color_p, $font_p, $ligne1); // Message ligne 1
imagettftext($image, 8, 0, 151, 16, $color_j, $font_j, $user[1]); // Nombre d'users
// Génération de l'image
imagepng($image, "final_image.png");
?>
------
Extrait de pimage.log
Code :
....
[15:54] <Eggdrop> Bonjour LitteulBlack !!
[15:55] <LitteulBlack> Bonjour Eggdrop :)
------
Extrait de jimage.log
Code :
....
[15:51] Dernier message repété 1 fois.
[15:55] +#image (+trn) : [m/4 o/2 h/0 v/2 n/1 b/0 e/0 I/0]
------
bck_image.png
[Image: http://www.litteulblack.net/share/bck_image.png]
------
final_image.png
[Image: http://www.litteulblack.net/share/final_image.png]
Je vous invite à lire la documentation sur la fonction "imagettftext()" > par ici
Crontab:
Pour permettre de générer un image de façon périodique, j'utilise crontab.
Code :
*/5 * * * * /usr/bin/php-cgi -f ...image.php
N'oubliez pas de verifier les permissions des fichiers.
------
Si vous avez des questions je suis disponible
