Interdire l'accès à certaines versions de navigateurs en php.

Fermé
Fontainard Messages postés 68 Date d'inscription dimanche 16 mars 2014 Statut Membre Dernière intervention 24 janvier 2017 - 19 juin 2014 à 11:25
Stanislas Poisson Messages postés 424 Date d'inscription samedi 1 décembre 2012 Statut Membre Dernière intervention 22 mai 2018 - 24 juin 2014 à 07:46
Bonjour,

J'aimerais cacher un formulaire pour les utilisateurs de navigateurs obsolètes pour mon site, tels que<ie8, opéra etc par le biais du php5...
Je n'ai pas réussi à faire de choses concluantes avec le ereg et le http_user_agent, auriez vous des propositions, des idées sur la démarche à effectuer s'il vous plait?

Merci grandement pour votre aide,

A voir également:

2 réponses

ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 228
19 juin 2014 à 11:33
'lut, avant toute chose, sache que ereg est obsolète! Donc à ne jamais utiliser.
Utilise preg_match à la place.
Quand à l'utilisation de l'
User-Agent
, c'est une pratique très répandue mais pas forcément efficace vu qu'on peut changer l'
User-Agent
... mais la majorité des gens ne le font pas, donc ça reste potable.
D'ailleurs, je ne vois pas pourquoi tu t'embêtes a créer ta propre fonction de détection alors que PHP a la sienne, get_browser, qui te renvoie un tableau rempli d'infos, incluant la version du navigateur. Sers-toi en.
2
Fontainard Messages postés 68 Date d'inscription dimanche 16 mars 2014 Statut Membre Dernière intervention 24 janvier 2017
Modifié par Fontainard le 19/06/2014 à 14:34
Merci pour ta réponse.
Effectivement, avec user-agent il y a pleins d'informations, chose pas très pratique à ancrer dans une base de donnée par exemple, où a déchiffrer intuitivement.
Mon idée, ce que j'aimerais dans l'idéal, c'est de récupérer le nom du navigateur, la version et la plateforme directement dans trois variables.

Qu'on ancrerait dans une phrase récapitulative $navigclient= = Le Navigateur correspondants est " u_name . " " . u_version . " sur " " . u_version"; et où ont ferait donc, tout simplement un listing des navigateurs obsolètes avec pour fonction preg_match n'est ce pas ;)

$versionobso = '/Chrome/';
if (preg_match($versionobso,$yourbrowser));
{
$erreur['navigateur']="Don't cry, il suffit de mettre à jour votre navigateur";
}

Je m'y met maintenant, j'vous tiens au jus de ce que ça donne, n'hésitez pas à m'y dire si il y a un moyen simple ou déjà existant pour faire ce espèce de chose !

Merci :=)
0
Fontainard Messages postés 68 Date d'inscription dimanche 16 mars 2014 Statut Membre Dernière intervention 24 janvier 2017
23 juin 2014 à 11:44
Voilà mon code, je m'étais inspiré d'une source sur internet.

<?php
ini_set("display_errors",0);error_reporting(0);
function getBrowser() 
{ 
    $u_agent = $_SERVER['HTTP_USER_AGENT']; 
    $bname = 'Unknown';
    $platform = 'Unknown';
    $version= "";

    if (preg_match('/linux/i', $u_agent)) {
        $platform = 'linux';
    }
    elseif (preg_match('/macintosh|mac os x/i', $u_agent)) {
        $platform = 'mac';
    }
    elseif (preg_match('/windows|win32/i', $u_agent)) {
        $platform = 'windows';
    }
    

    if(preg_match('/MSIE/i',$u_agent) && !preg_match('/Opera/i',$u_agent)) 
    { 
        $bname = 'Internet Explorer'; 
        $ub = "MSIE"; 
    } 
    elseif(preg_match('/Firefox/i',$u_agent)) 
    { 
        $bname = 'Mozilla Firefox'; 
        $ub = "Firefox"; 
    } 
    elseif(preg_match('/Chrome/i',$u_agent)) 
    { 
        $bname = 'Google Chrome'; 
        $ub = "Chrome"; 
    } 
    elseif(preg_match('/Safari/i',$u_agent)) 
    { 
        $bname = 'Apple Safari'; 
        $ub = "Safari"; 
    } 
    elseif(preg_match('/Opera/i',$u_agent)) 
    { 
        $bname = 'Opera'; 
        $ub = "Opera"; 
    } 
    elseif(preg_match('/Netscape/i',$u_agent)) 
    { 
        $bname = 'Netscape'; 
        $ub = "Netscape"; 
    } 
    
    $known = array('Version', $ub, 'other');
    $pattern = '#(?<browser>' . join('|', $known) .
    ')[/ ]+(?<version>[0-9.|a-zA-Z.]*)#';
    if (!preg_match_all($pattern, $u_agent, $matches)) {
    }
    
    $i = count($matches['browser']);
    if ($i != 1) {

        if (strripos($u_agent,"Version") < strripos($u_agent,$ub)){
            $version= $matches['version'][0];
        }
        else {
            $version= $matches['version'][1];
        }
    }
    else {
        $version= $matches['version'][0];
    }
    
    if ($version==null || $version=="") {$version="?";}
    
    return array(
        'userAgent' => $u_agent,
        'name'      => $bname,
        'version'   => $version,
        'platform'  => $platform,
        'pattern'    => $pattern
    );
} 

$ua=getBrowser();
$yourbrowser= "Your browser: " . $ua['name'] . " " . $ua['version'] . " on " . $ua['platform']; //. " reports: <br >" . $ua['userAgent'];

print_r($yourbrowser);

if(preg_match("Mozilla Firefox 30", $yourbrowser));
{
$erreur['navigateur']="Votre navigateur est trop ancien pour supporter ce site. Veuillez télécharger une nouvelle version.";
}

?>


Le problème réside dans le fait que le preg_match ne semble pas fonctionner du tout alors que le navigateur renvois la version exacte du navigateur. Le problème réside alors dans les trois dernières lignes du code avec lequel je n'arrive à rien ;P

Si vous pouviez m'aider ça serait gentil!
Merci!
0
Stanislas Poisson Messages postés 424 Date d'inscription samedi 1 décembre 2012 Statut Membre Dernière intervention 22 mai 2018 66
24 juin 2014 à 07:46
A tu jeter un oeil sur http://browscap.org/ qui à un fichier de détéction et le script qui vas avec? Il suffit tout simplement de mettre a jour régulierement le fichier browscap.ini qui sert au tri.

Attention tout de même, c'est une grosse fonction qui peut prendre 2-3 secondes, prendre les précautions d'usage.
0