CodPix!

  • Plein écran
  • Ecran large
  • Ecran réduit
  • Augmenter la taille
  • Taille par défaut
  • Diminuer la taille
Mettre en favoris   Rss 2.0   Windows Live Alerts   Ajouter à iGoogle   Ajouter à Netvibes   Ajouter à MonYahoo   Suivez-nous sur Facebook

Userbar avec infos du visiteur

Le .php permet énormément de choses, la librairie GD aussi. Créer une userbar (ou toute autre image) reprenant les informations d’un visiteur est simple.
userbar ip


Voyons comment faire :
Tout d’abord, la détection du système d’exploitation :

function OS($Agent=false)
{
if(!$Agent) $Agent = $_SERVER['HTTP_USER_AGENT'];
$os = null;
$OS_arr = Array(
'Windows NT 6.1' => 'Windows Seven',
'Windows NT 6.0' => 'Windows Vista',
'Windows NT 5.2' => 'Windows Server 2003',
'Windows NT 5.1' => 'Windows XP',
'Windows NT 5.0' => 'Windows 2000',
'Win 9x 4.90' => 'Windows Me.',
'Windows 98' => 'Windows 98',
'Win98' => 'Windows 98',
'Win95' => 'Windows 95',
'Mac' => 'Macintosh',
'PPC' => 'Macintosh',
'Linux' => 'Linux',
'FreeBSD' => 'FreeBSD',
'Unix' => 'Unix',
'SunOS' => 'SunOS',
'IRIX' => 'IRIS',
'BeOS' => 'BeOS',
'OS/2' => 'OS/2',
'AIX' => 'AIX');
foreach($OS_arr as $key_OS => $value_OS)
{
if(eregi($key_OS, $Agent))
{
$os = $value_OS;
}
}
if(empty($os)) return 'Inconnu';
else return $os;
}


Vient ensuite la détection du navigateur :

$nav = 'Inconnu';
$browser = array('Internet Explorer'=>'MSIE', 'Mozilla Firefox'=>'Firefox', 'Mozilla', 'Netscape', 'Safari', 'Konqueror', 'Epiphany', 'Lynx', 'Opera');
foreach($browser as $cle => $val){
if(strpos($_SERVER['HTTP_USER_AGENT'], $val)){
if(is_numeric($cle)){
$nav = $val;
}else{
$nav = $cle;
}
break;
}
}


Je ne m’attarde pas sur l’explication des 2 premiers points puisqu’il n’y a rien à modifier, juste un copier-coller.

On construit ensuite l’image :

Je vais développer un peu plus la construcion de l’image puisque c’est ce qui sera modifié en fonction des goûts et des besoins.

La définition de l’image :

$image = imagecreatefrompng("./images/MON_IMAGE.png");
imagealphablending($image, false);
imagesavealpha($image, true);


La première ligne définit le chemin de l’image qui sera utilisée. La 2è et la 3è permettent de conserver la transparence de l’image de fond dans le cas où celle-ci n’est pas « carrée ».

On indique le chemin de la police utilisée.

$font = './images/MA_POLICE.ttf';


Attention, une police au format .TTF !

Les couleurs de texte (au format RVB) :

$white = imagecolorallocate($image, 255, 255, 255);
$grey = imagecolorallocate($image, 128, 128, 128);
$black = imagecolorallocate($image, 0, 0, 0);


J’ai choisi blanc, noir et gris mais on met ce qu’on veut. Certains préfèrent couleur1, couleur2,… et modifier les valeurs RVB, mais on risque de s’emmêler les pinceaux quand il y a beaucoup de lignes de codes.

Maintenant, les variables en image…

// La ligne reprenant l'ip
imagettftext($image, 10, 0, 51, 9, $black, $font, $_SERVER['REMOTE_ADDR'] . ' - ' . $host=gethostbyaddr($_SERVER['REMOTE_ADDR']));
imagettftext($image, 10, 0, 50, 8, $white, $font, $_SERVER['REMOTE_ADDR'] . ' - ' . $host=gethostbyaddr($_SERVER['REMOTE_ADDR']));

// La ligne reprenant les infos du navigateur
imagettftext($image, 10, 0, 51, 18, $black, $font, $os=OS($_SERVER['HTTP_USER_AGENT']) . ' - ' . $nav);
imagettftext($image, 10, 0, 50, 17, $white, $font, $os=OS($_SERVER['HTTP_USER_AGENT']) . ' - ' . $nav);


J’ai dédoublé chaque ligne, pourquoi? Simplement pour appliquer un effet d’ombre au texte. A noter que, dans le code, l’ombre (arrière plan) se place en premier.
Ces lignes sont écrites de la façon suivante :

imagettftext($image, 10, 0, 50, 17, $white, $font, $variables);


$image = image de fond
10 = taille de la police
0 = angle d'inclinaison du texte
50 = distance du texte par rapport au bord gauche
17 = distance du texte par rapport au bord supérieur

Et on finalise le code de l’image :
- On définit le format de l’image de base

header('Content-Type: image/png');   // ou image/gif ou image/jpg ...
imagepng($image);   // et donc imagegif, imagejpg,...


- On détruit l’image pour libérer la mémoire associée

imagedestroy($image);


Et enfin le code complet :

<?php

/*
* Userbar avec infos du visiteur ©2009
* par Clix! - http://codpix.be/
*/
function OS($Agent=false)
{
if(!$Agent) $Agent = $_SERVER['HTTP_USER_AGENT'];
$os = null;
$OS_arr = Array(
'Windows Seven',
'Windows NT 6.0' => 'Windows Vista',
'Windows NT 5.2' => 'Windows Server 2003',
'Windows NT 5.1' => 'Windows XP',
'Windows NT 5.0' => 'Windows 2000',
'Win 9x 4.90' => 'Windows Me.',
'Windows 98' => 'Windows 98',
'Win98' => 'Windows 98',
'Win95' => 'Windows 95',
'Mac' => 'Macintosh',
'PPC' => 'Macintosh',
'Linux' => 'Linux',
'FreeBSD' => 'FreeBSD',
'Unix' => 'Unix',
'SunOS' => 'SunOS',
'IRIX' => 'IRIS',
'BeOS' => 'BeOS',
'OS/2' => 'OS/2',
'AIX' => 'AIX');
foreach($OS_arr as $key_OS => $value_OS)
{
if(eregi($key_OS, $Agent))
{
$os = $value_OS;
}
}
if(empty($os)) return 'Inconnu';
else return $os;
}

// Détection du navigateur
$nav = 'Inconnu';
$browser = array('Internet Explorer'=>'MSIE', 'Mozilla Firefox'=>'Firefox', 'Mozilla', 'Netscape', 'Safari', 'Konqueror', 'Epiphany', 'Lynx', 'Opera');
foreach($browser as $cle => $val){
if(strpos($_SERVER['HTTP_USER_AGENT'], $val)){
if(is_numeric($cle)){
$nav = $val;
}else{
$nav = $cle;
}
break;
}
}

// Construction de l'image
// Image de fond
$image = imagecreatefrompng("./images/MON_IMAGE.png");   // définit le chemin de l'image de fond qui sera utilisée
imagealphablending($image, false);   // imagealphablending et imagesavealpha permettent de conserver la transparence
imagesavealpha($image, true);

// Police
$font = './images/MA_POLICE.ttf';

// Couleur de texte au format RVB
$white = imagecolorallocate($image, 255, 255, 255);
$grey = imagecolorallocate($image, 128, 128, 128);
$black = imagecolorallocate($image, 0, 0, 0);  

// "templating" des textes sur l'image
// La ligne reprenant l'ip
imagettftext($image, 10, 0, 51, 9, $black, $font, $_SERVER['REMOTE_ADDR'] . ' - ' . $host=gethostbyaddr($_SERVER['REMOTE_ADDR']));
imagettftext($image, 10, 0, 50, 8, $white, $font, $_SERVER['REMOTE_ADDR'] . ' - ' . $host=gethostbyaddr($_SERVER['REMOTE_ADDR']));
// La ligne reprenant les infos du navigateur
imagettftext($image, 10, 0, 51, 18, $black, $font, $os=OS($_SERVER['HTTP_USER_AGENT']) . ' - ' . $nav);
imagettftext($image, 10, 0, 50, 17, $white, $font, $os=OS($_SERVER['HTTP_USER_AGENT']) . ' - ' . $nav);

// On définit le format de l'image de base
header('Content-Type: image/png');   // ou image/gif ou image/jpg ...
imagepng($image);   // et donc imagegif, imagejpg,...
// On détruit l'image pour libérer la mémoire associée
imagedestroy($image);

?>

Exemple :

userbar ip


Nous verrons dans un prochain tutoriel comment écrire dans l’image depuis l’url ou un fichier texte, ainsi que l’utilisation de l’url-rewriting par .htaccess pour pouvoir utiliser plus facilement l’image (lien et extension), le choix de l’image de fond suivant un mot clé (pratique, par exemple, pour les forums),…

Tutoriel par Clix! ©2010 – DO NOT RIP.


Vous êtes ici: Tutoriels PHP Userbar avec infos du visiteur