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.
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
}
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
}
}
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
}
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 .
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
}
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.
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;
}
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.
if (isset($_SERVER['HTTP_USER_AGENT']) && preg_match("/(?i)msie|trident|Edge/",$_SERVER['HTTP_USER_AGENT'])) {
// eh, IE found
}
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);
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é.
'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"].
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]-->
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
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 :-(
}
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'])