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

Fontainard Messages postés 68 Date d'inscription   Statut Membre Dernière intervention   -  
Stanislas Poisson Messages postés 424 Date d'inscription   Statut Membre Dernière intervention   -
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 4814 Date d'inscription   Statut Contributeur Dernière intervention   1 223
 
'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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   66
 
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