29-11

Fonction PHP get_browser

Aujourd'hui, je cherchais à effectuer un petit filtrage en fonction du navigateur Internet, sur l'une de mes pages. Je regarde donc en fonction des variables User Agent mais je trouve tout d'abord des regexps plutôt immondes (je n'aime pas ça) et lourds. Finalement, au détour d'une recherche, je tombe sur la fonction get_browser. Je tente de l'utiliser et je tombe sur le message d'erreur:
 PHP Warning:  get_browser() [function.get-browser]: browscap ini directive not set in /mon/fichier.php
Je regarde la fonction plus en détail sur php.net et je vois qu'ils parlent d'une directive nommée php_browscap.ini. Donc direction mon php.ini
cd /etc/php5/cgi/
cat php.ini | grep brows
# Retour
[browscap]
; browscap =
Il faut donc rajouter une valeur à ce paramètre et indiquer (cf. Doc PHP) un fichier contenant la liste des navigateurs ainsi que de leurs versions. PHP nous signale qu'un site référence de nombreux fichiers de ce type Browser Capabilities Project. Ce site nous propose le téléchargement de plusieurs formats de fichiers. Je commence avec la version "grosse" et je m'aperçois tout de suite (en l'ouvrant) que celle-ci contient vraiment un peu trop de navigateurs, on va donc prendre la version Lite.
cd /etc/php5/conf.d/
wget "http://browsers.garykeith.com/stream.asp?Lite_PHP_BrowsCapINI" -O browscap.ini
Length: 195087 (191K) [application/octet-stream]
Le fichier est récupéré, on va maintenant indiqué à PHP de le prendre en compte.
cd /etc/php5/cgi/
nano php.ini
# On recherche la ligne correspondant à browsercap (ctrl + W sous nano)
# On édite ensuite ce qui nous intéresse
browscap = /etc/php5/cgi/conf.d/browscap.ini
# On sauvegarde puis on redémarre notre serveur Web
/etc/init.d/lighttpd restart
Voilà, notre extension est configurée. Voilà quelques exemples sur les valeurs de retours avec la configuration suivante
< ?php print_r(get_browser(null, false)); ?>
Pour FireFox
stdClass Object
(
    [browser_name_regex] => ^mozilla/5\.0 (.*rv:1\.9.*) gecko/.*$
    [browser_name_pattern] => Mozilla/5.0 (*rv:1.9*) Gecko/*
    [parent] => Mozilla 1.9
    [browser] => Mozilla
    [version] => 1.9
    [majorver] => 1
    [minorver] => 9
    [alpha] => 1
    [frames] => 1
    [iframes] => 1
    [tables] => 1
    [cookies] => 1
    [javaapplets] => 1
    [javascript] => 1
    [cssversion] => 2
    [supportscss] => 1
    [platform] => unknown
    [beta] => 
    [win16] => 
    [win32] => 
    [win64] => 
    [backgroundsounds] => 
    [cdf] => 
    [vbscript] => 
    [activexcontrols] => 
    [isbanned] => 
    [ismobiledevice] => 
    [issyndicationreader] => 
    [crawler] => 
    [aol] => 
    [aolversion] => 0
)
Pour un Apple iPhone
stdClass Object
(
    [browser_name_regex] => ^mozilla/5\.0 (iphone; u; cpu iphone os 3_1.* like mac os x; .*) applewebkit/.* (khtml, like gecko).*$
    [browser_name_pattern] => Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_1* like Mac OS X; *) AppleWebKit/* (KHTML, like Gecko)*
    [parent] => iPhone
    [version] => 3.1
    [majorver] => 3
    [minorver] => 1
    [browser] => iPhone
    [platform] => iPhone OSX
    [frames] => 1
    [iframes] => 1
    [tables] => 1
    [cookies] => 1
    [backgroundsounds] => 1
    [javaapplets] => 1
    [javascript] => 1
    [ismobiledevice] => 1
    [cssversion] => 3
    [supportscss] => 1
    [alpha] => 
    [beta] => 
    [win16] => 
    [win32] => 
    [win64] => 
    [cdf] => 
    [vbscript] => 
    [activexcontrols] => 
    [isbanned] => 
    [issyndicationreader] => 
    [crawler] => 
    [aol] => 
    [aolversion] => 0
)
Comme vous le voyez, cette fonction retourne vraiment des informations intéressantes au niveau de la capacité des navigateurs.

 

 

2 Commentaires pour ce billet.

 

 

  1. Bonjour,

    comment fait-on lorsque l'on a pas accès au fichier php.ini?
    Je suis hosté chez OVH sur un serveur mutualisé pro.

    Merci d'avance

  2. @Studio5150: Je te suggère de regarder du côté de Browser Cap sur Google code qui fourni des fonctions équivalentes.
    C'est un peu moins rapide qu'avec la fonction php.ini, mais cela tourne de manière équivalente.
    Attention si tu es en PHP 5.3.0 ou supérieur, il y a une petite modification à faire sur la Class.
    http://code.google.com/p/phpbrowscap/

 

Votre commentaire