vue : 1 492 fois

PHP ne permet pas (à ce jour et à ma connaissance) de détecter les plugins du navigateur client. Il faut passer par Javascript.

Mais je voulais ensuite initialiser une variable PHP pour le cas où, en l'absence de plugin, je puisse inclure un fichier invitant le visiteur à télécharger le plugin manquant en lui fournissant un lien direct.

Un exemple spécifique :

Comme Adobe ne fournit plus de plugin Acrobat Reader pour Firefox Mac il me fallait :

  • détecter la plateforme et, si c'est un Mac, savoir s'il est PPC ou Intel (les plugins sont différents).
  • savoir si le visiteur (Firefox Mac) avait ce plugin installé et, sinon, lui proposer le lien adhoc.

Si vous êtes sur FireFox Mac, vous pouvez tester par vous même avec cet exemple.

Le script expliqué pas à pas

Détéction du visiteur "FireFox Mac" en PHP

Donc, en tout début de document, je place mes codes PHP et j'initialise mes variables :

<?php
//------ detection de firefox ------------
if(strpos($_SERVER["HTTP_USER_AGENT"], 'Firefox')!== false){

//------- detection du Mac
if(strpos($_SERVER["HTTP_USER_AGENT"], 'Macintosh')!== false){$mac=1;}

//------- detection si mac ppc
if(strpos($_SERVER["HTTP_USER_AGENT"], 'PPC')!== false){$ppc=1;}

//------- detection si mac intel
if(strpos($_SERVER["HTTP_USER_AGENT"], 'Intel')!== false){$intel=1;}

//------- detection si camino
if(strpos($_SERVER["HTTP_USER_AGENT"], 'Camino')!== false){$cam=1;}

//-------Initialisation de la variable $nav

if($mac && $ppc){$nav='PPC';}
if($mac && $intel){$nav='Intel';}

//----url des plugins
if($nav=="Intel"){$urlplugin="https://addons.mozilla.org/fr/firefox/addon/7518/";}
if($nav=="PPC"){$urlplugin="http://www.schubert-it.com/pluginpdf/";}
} ?>

A ce stade, je sais déjà si le visiteur

  • est sur FireFox mais pas sur Camino (qui utilise une signature similaire)
  • s'il est sur Mac Intel ou PPC

et j'en ai profité pour initialiser la variable $urlplugin qui sera différente selon que le visiteur est sur Intel ou PPC

Détection si le plugin est présent

Là, je fais appel au Javascript que je place dans le <HEAD></HEAD> de la page.

la variable plug est un tableau de tous les plugins du navigateur client
la variable nb en constitue le nombre.

<script type="text/javascript">
plug=window.navigator.plugins;
nb=window.navigator.plugins.length;

Je crée donc une boucle qui va parcourir tous les plugins présent et m'intéresser uniquement au plugin PDF.

for(i=0;i<=nb;i++){
if(plug[i].name.indexOf('PDF')!=-1){

Si le plugin est présent j'initialise une variable PHP, en l'occurrence la variable que j'ai baptisée $pdf à l'aide de l'instruction document.write() de JavaScript et je ferme mon script.

document.write("<?php $pdf=1 ?>");}
}
</script>

Dans le corps de la page (<body> </body>)

A partir de ce moment on peut faire ce qu'on veut en PHP. Si $pdf==1 on peut facilement faire afficher un morceau de page ou inclure un fichier externe.

Pour cet exemple, j'ai choisi la première solution : afficher un moreceau de page.

Si $nav existe (c'est Firefox et Mac) et $cam==0 (ce n'est pas Camino)

<?php
if($nav && $cam==0){

et si $pdf==1 (le plugin est présent), j'affiche une phrase pour l'exemple

if($pdf==1){echo "Vous êtes sur FireFox Mac $nav et vous avez le plugin PDF <hr>";}

sinon, j'invite le visiteur à télécharge le plugin selon sa version Intel ou PPC

else{
echo "Vous êtes sur FireFox $nav mais VOUS n'avez pas le plugin PDF<p>";
echo "Vous pouvez le télécharger ici : ";

?><a href="<?php echo $urlplugin?>" target="_blank"><?php echo $urlplugin?></a>
<?php }
}
?>

Et voilà ;)

Conclusion

Evidemment, il est absurde d'afficher au visiteur qu'il possède le plugin en question.

Vous effecerez la ligne

if($pdf==1){echo "Vous êtes sur FireFox Mac $nav et vous avez le plugin PDF <hr>";}

et replacerez le else{ par if($pdf==1){

Vous pouvez adapter ce script comme bon vous semble et, si vous êtes sympa, vous ne manquerez pas de placer une ligne de commentaire indiquant l'auteur la source ;)))

En fait toute l'astuce consiste simplement à utiliser le document.write() de Javascript pour initialiser une variable PHP. Attention, ce que vous affectez à la variable php est une valeur alphanumérique.

si, par exemple vous écrivez le script suivant :

<script type="text/javascript">
var a=1;
document.write("<?php $pdf=a ?>");
</script>

la variable $pdf sera égale à "a" et non à 1.

Vous pouvez télécharge la page exemple.php brute de décoffrage (sans styles) au format .zip qui pèse 4 Ko