web-dev-qa-db-fra.com

PHP: Si Internet Explorer 6, 7, 8 ou 9

Je souhaite effectuer une condition dans PHP pour les différentes versions d'Internet Explorer, comme suit:

if($browser == ie6){ //do this} elseif($browser == ie7) { //dothis } elseif...

J'ai vu de nombreuses variantes d'un code similaire, mais je recherchais quelque chose de très simple, très facile à coder, qui permet de faire du simple si et d'autre et de faire des choses différentes.

Merci

EDIT: J'ai besoin de cela pour montrer différents messages aux utilisateurs, donc les conditions CSS, etc. ne sont pas bonnes.

82
Cameron

C'est ce que j'ai fini par utiliser une variante de, qui vérifie IE8 et inférieur:

if (preg_match('/MSIE\s(?P<v>\d+)/i', @$_SERVER['HTTP_USER_AGENT'], $B) && $B['v'] <= 8) {
    // Browsers IE 8 and below
} else {
    // All other browsers
}
129
Cameron

Une version qui continuera à fonctionner avec IE10 et IE11:

preg_match('/MSIE (.*?);/', $_SERVER['HTTP_USER_AGENT'], $matches);
if(count($matches)<2){
  preg_match('/Trident\/\d{1,2}.\d{1,2}; rv:([0-9]*)/', $_SERVER['HTTP_USER_AGENT'], $matches);
}

if (count($matches)>1){
  //Then we're using IE
  $version = $matches[1];

  switch(true){
    case ($version<=8):
      //IE 8 or under!
      break;

    case ($version==9 || $version==10):
      //IE9 & IE10!
      break;

    case ($version==11):
      //Version 11!
      break;

    default:
      //You get the idea
  }
}
81
Doug

Voici une excellente ressource pour détecter les navigateurs en php: http://php.net/manual/en/function.get-browser.php

Voici l'un des exemples qui semble le plus simple:

<?php
function get_user_browser()
{
    $u_agent = $_SERVER['HTTP_USER_AGENT'];
    $ub = '';
    if(preg_match('/MSIE/i',$u_agent))
    {
        $ub = "ie";
    }
    elseif(preg_match('/Firefox/i',$u_agent))
    {
        $ub = "firefox";
    }
    elseif(preg_match('/Safari/i',$u_agent))
    {
        $ub = "safari";
    }
    elseif(preg_match('/Chrome/i',$u_agent))
    {
        $ub = "chrome";
    }
    elseif(preg_match('/Flock/i',$u_agent))
    {
        $ub = "flock";
    }
    elseif(preg_match('/Opera/i',$u_agent))
    {
        $ub = "opera";
    }

    return $ub;
}
?>

Ensuite, dans votre code, vous pouvez dire quelque chose comme:

$browser = get_user_browser();
if($browser == "ie"){
    //do stuff
}
16
Michael Jasper

Vous pouvez vérifier la variable de serveur HTTP_USER_AGENT. L'agent utilisateur transféré par IE contient MSIE

if(strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false) { ... }

Pour des versions spécifiques, vous pouvez prolonger votre condition

if(strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 6.') !== false) { ... }

Voir aussi cette question connexe .

14
Daff

Je fais ça

$u = $_SERVER['HTTP_USER_AGENT'];

$isIE7  = (bool)preg_match('/msie 7./i', $u );
$isIE8  = (bool)preg_match('/msie 8./i', $u );
$isIE9  = (bool)preg_match('/msie 9./i', $u );
$isIE10 = (bool)preg_match('/msie 10./i', $u );

if ($isIE9) {
    //do ie9 stuff
}
10
Vince Lowe

PHP a une fonction appelée get_browser () qui retournera un objet (ou un tableau si vous le souhaitez) avec des détails sur le navigateur de l'utilisateur et sur ce qu'il peut faire.

Un simple coup d'oeil m'a donné ce code:

$browser = get_browser( null, true );
if( $browser['name'] == "Firefox" )
    if( $browser['majorversion'] == 4 )
        echo "You're using Firefox version 4!";

Ce n'est pas un moyen infaillible (comme il se lit dans HTTP_USER_AGENT , qui peut être usurpé et qui sera parfois mal analysé par php), mais c'est le plus facile que vous puissiez trouver, à ma connaissance.

5
Mike S

Voici une petite fonction php que j'ai écrite qui utilise la regex directement à partir du code de détection javascript suggéré par MSFT de cet article: http://msdn.Microsoft.com/en-us/library/ms537509(v=vs.85).aspx

/**
* Returns the version of Internet Explorer or false
*/
function isIE(){

    $isIE = preg_match("/MSIE ([0-9]{1,}[\.0-9]{0,})/",$_SERVER['HTTP_USER_AGENT'],$version);
    if($isIE){
        return $version[1];
    }
    return $isIE;

}
4
minorgod

Vous pouvez également consulter PHP get_browser();http://php.net/manual/fr/function.get-browser.php

Peut-être que vous le trouverez utile pour plus de fonctionnalités.

4
jolt
if (isset($_SERVER['HTTP_USER_AGENT']) && preg_match("/(?i)msie|trident|Edge/",$_SERVER['HTTP_USER_AGENT'])) {
// eh, IE found
}
4
xsor

La vérification de MSIE uniquement n'est pas suffisante pour détecter IE. Vous avez également besoin de "Trident" qui n’est utilisé que dans IE11. Voici donc ma solution qui a fonctionné avec les versions 8 à 11.

$agent=strtoupper($_SERVER['HTTP_USER_AGENT']);
$isIE=(strpos($agent,'MSIE')!==false || strpos($agent,'TRIDENT')!==false);
3
Markus Zeller

Vous pouvez le faire en analysant l’en-tête user-agent:

http://php.about.com/od/learnphp/p/http_user_agent.htm

Méfiez-vous que ce n'est pas très fiable et peut être trivialement falsifié.

2
Uku Loskit

'HTTP_USER_AGENT' Contenu de l'agent utilisateur: en-tête de la demande en cours, le cas échéant. C'est une chaîne indiquant l'agent utilisateur en cours d'accès à la page. Un exemple typique est: Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586). Entre autres choses, vous pouvez utiliser cette valeur avec get_browser () pour adapter la sortie de votre page aux capacités de l'agent d'utilisateur. 

Je suppose donc que vous pourrez obtenir le nom/id du navigateur à partir de la variable $ _SERVER ["HTTP_USER_AGENT"].

2
arnehehe

Vous pouvez utiliser quelque chose comme ceci pour différents messages ou div/css

<!--[if IE 6]>
<style type="text/css">
div.ie6 { display:block; }
</style>
<![endif]-->

<!--[if IE 7]>
<style type="text/css">
div.ie7 { display:block; }
</style>
<![endif]-->

<!--[if IE 8]>
<style type="text/css">
div.ie8 { display:block; }
</style>
<![endif]-->

<!--[if IE 9]>
message1
<![endif]-->

<!--[if !IE 6]>
message2
<![endif]-->

<!--[if lt IE 8]>
message3
<![endif]-->

OU utilisez différentes div de css

<!--[if lte IE 8]>
<style type="text/css">
div.lteie8 { display:block; }
</style>
<![endif]-->

<!--[if gt IE 6]>
<style type="text/css">
div.gtie6 { display:block; }
</style>
<![endif]-->

<!--[if gte IE 6]>
<style type="text/css">
div.gteie6 { display:block; }
</style>
<![endif]-->
1
Enrico Tempesti

mais reste utile - et fonctionne avec IE11! voici un autre moyen rapide d’obtenir les navigateurs communs renvoyés pour la classe css:

function get_browser()
{
    $browser = '';
    $ua = strtolower($_SERVER['HTTP_USER_AGENT']);
    if (preg_match('~(?:msie ?|trident.+?; ?rv: ?)(\d+)~', $ua, $matches)) $browser = 'ie ie'.$matches[1];
    elseif (preg_match('~(safari|chrome|firefox)~', $ua, $matches)) $browser = $matches[1];

    return $browser;
}

Donc cette fonction retourne: 'safari' ou 'firefox' ou 'chrome', ou 'ie ie8', 'ie ie9', 'ie ie10', 'ie ie11'.

j'espère que ça aide

1
antoni

Notez le cas dans 'Trident':

if (isset($_SERVER['HTTP_USER_AGENT']) &&
    ((strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false) || strpos($_SERVER['HTTP_USER_AGENT'], 'Trident') !== false)) {   
     // IE is here :-(
    }
0
Vlado

si vous avez Internet Explorer 11 et qu'il tourne sur un PC à écran tactile, vous devez utiliser: preg_match ('/ Trident/7.0; Toucher; rv: 11.0 /', $ _SERVER ['HTTP_USER_AGENT'])). preg_match ('/ Trident/7.0; va: 11.0 /', $ _SERVER ['HTTP_USER_AGENT'])